*!* Below example is for Graph8. (Nearly same as Excel charting)
*!* If you cannot download wc0993.exe from microsoft site
*!* xlConstants can be found by :
*!* -Open Excel
*!* -Select tools\macro\VB editor
*!* -Press F2 to bring up "Object browser"
*!* -Find needed xlConstant type ie:xlChartType
*!* -On right window click needed Constant ie: xl3DArea
*!* -Below the window constant value is displayed
*!* cetin@neptune.imst.deu.edu.tr
*** set the LOCALEID to English
nlLocaleId=sys(3004) && Save local id
=sys(3006,1033) && We will be sending instructions in English
* Part of xlChartType constants
#define xl3DArea -4098
#define xl3DColumn -4100
#define xl3DLine -4101
#define xl3DPie -4102
#define xlArea 1
#define xlBubble3DEffect 87
#define xlLine 4
#define xlPie 5
#define xlRadar -4151
#define xlSurface 83
#DEFINE TAB CHR(9)
#DEFINE CRLF CHR(13)+CHR(10)
create cursor test (degree i, sine n(8,4) NULL, cosine n(8,4))
for ix = 1 to 90
insert into test ;
values ;
(ix,cos(ix)*ix,sin(ix)*ix)
endfor
45
scan next 30 && Nullify 30 degrees
replace sine with .null. && Nullify some values to see effect
endscan
* Data prepare - Slower *
* MCGDATA = " " && Initialize with one empty cell - if will fill in object.Datasheet
* Data prepare - Slower *
* VFP preparing data is much faster
* Try commenting this part (between * Data prepare * labels)
* and uncommenting the commented part (between * Data prepare - Slower * labels)
* Data prepare *
wait window nowait "Filling cell values..."
MCGDATA = ""
nCols = fcount()
for ix = 1 to nCols
MCGDATA = MCGDATA + iif(empty(MCGDATA),"",TAB)+field(ix)
endfor
MCGDATA = MCGDATA + CRLF
scan
for ix = 1 to nCols
MCGDATA = MCGDATA + iif(ix=1,"",TAB)+nvl(str(evaluate(field(ix))),"")
endfor
MCGDATA = MCGDATA + CRLF
endscan
* Data prepare *
create cursor testgen (genfld1 g)
append blank
append general genfld1 class "msgraph" data MCGDATA
create report testgraph from testgen
modi report testgraph
***
* Now we have Graph object in gen field. (Graph8)
* Play with it
oForm = createobject("Form")
with oForm
.height = 400
.width = 600
.show
.closable = .f.
.addobject("myGraph","OleBoundControl")
.addobject("myQuit1","myQuit")
.addobject("myChanger1","myDataChanger")
.addobject("myChanger2","myTypeChanger")
.addobject("myReport1","myReport")
with .myGraph
.height = oForm.height - 20
.width = oForm.width
.left = 0
.top = 0
.ControlSource = "testgen.Genfld1"
* Data prepare - Slower *
*!* FILLING DATA IN OBJECT DATASHEET
*!* wait window nowait "Filling cell values..."
*!* with .object.application.datasheet
*!* select test
*!* nRows = reccount()+1
*!* nCols = fcount()
*!* for ix = 1 to nCols
*!* .Cells(1,ix).Value = field(ix)
*!* endfor
*!* scan
*!* for ix = 1 to nCols
*!* if !isnull(evaluate(field(ix)))
*!* .Cells(recno()+1,ix).Value = evaluate(field(ix))
*!* endif
*!* endfor
*!* endscan
*!* endwith
* Data prepare - Slower *
wait window nowait "Plotting..."
.hastitle = .t.
.haslegend = .t.
.ChartTitle.caption = "This is chart title"
.ChartType=xl3DArea
.object.application.plotby = 2
#define xlCategory 1
#define xlValue 2
#define xlSeriesAxis 3
With .Axes(xlCategory)
.HasTitle = .t.
with .AxisTitle
.Caption = "This is category title"
.Font.Name = "Arial"
.Font.Size = 10
.Font.Bold = .t.
endwith
EndWith
With .Axes(xlSeriesAxis)
.HasTitle = .T.
with .AxisTitle
.Caption = "This is SeriesAxis title"
.Font.Size = 8
.Font.Bold = .f.
.Orientation = 90 && Show 90 degrees rotated
endwith
EndWith
With .Axes(xlValue)
.HasTitle = .T.
with .AxisTitle
.Caption = "This is Value title"
.Font.Size = 10
.Font.Bold = .f.
.Orientation = 90 && Show 90 degrees rotated - clockwise
endwith
EndWith
wait clear
.ChartArea.copy()
.visible=.T.
endwith
.myQuit1.visible = .t.
.myReport1.left = .myChanger2.left+.myChanger2.width + 5
.myReport1.visible = .t.
.myChanger1.visible = .t.
.myChanger2.visible = .t.
endwith
**** Set the LocaleId to the previous value
=sys(3006,val(nlLocaleId))
read events
define class myquit as commandbutton
left=1
top=0
Autosize = .T.
Caption="Close"
procedure click
release all
clear events
endproc
enddefine
define class myDataChanger as commandbutton
left=150
top=0
Autosize = .T.
Caption="Change some data"
procedure click
wait window nowait "Changing cell values..."
with thisform.myGraph.object.application.datasheet
select test
scan
if isnull(sine)
.Cells(recno()+1,2).Value = sin(recno())*recno()
endif
endscan
endwith
select testgen
thisform.myGraph.doverb(-6)
wait clear
endproc
enddefine
define class myTypeChanger as commandbutton
left=300
top=0
Autosize = .T.
Caption="Change Chart Type"
procedure click
thisform.myGraph.charttype = xlBubble3dEffect
thisform.myGraph.doverb(-6)
endproc
enddefine
define class myreport as commandbutton
left=1
top=0
Autosize = .T.
Caption="Report"
procedure click
* Testgraph prepared manually containing gen field and sized
report form testgraph preview
endproc
enddefineCetinÇetin Basöz
The way to Go
Flutter - For mobile, web and desktop.
World's most advanced open source relational database.
.Net for foxheads - Blog (main)
FoxSharp - Blog (mirror)
Welcome to FoxyClasses
LinqPad - C#,VB,F#,SQL,eSQL ... scratchpad