Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Creating Bar/Pie Chart
Message
From
10/02/1999 06:07:14
Cetin Basoz
Engineerica Inc.
Izmir, Turkey
 
 
To
10/02/1999 04:05:50
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Miscellaneous
Thread ID:
00185859
Message ID:
00185873
Views:
28
>I would like to create a Bar/Pie Chart in VFP form.
>I think a OLE needed to be created first. But how to
>go about updating the figures to reflect the changes?
>Please share some syntax examples, thanks.
Hi Alvin,
A simple sample :)
*** 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
enddefine
Cetin
Ç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
Previous
Reply
Map
View

Click here to load this message in the networking platform