*** 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 messagebox("Pls add an OLEBoundControl to report and size big enough. Field name is [genfld1]") 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 * warning !!! - Testgraph prepared manually containing gen field and sized messagebox("If you changed graphtype click once to update."+chr(13)+"This is a quirk of MSGraph.") report form testgraph preview endproc enddefineCetin