*!* 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 >*** >* 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") > 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. > .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 > 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 >endproc >enddefineCetin