Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Graphs
Message
From
22/05/1999 09:08:24
Cetin Basoz
Engineerica Inc.
Izmir, Turkey
 
 
To
21/05/1999 15:41:50
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Title:
Re: Graphs
Miscellaneous
Thread ID:
00221575
Message ID:
00221735
Views:
11
>I need to create a bar graph in my form. Is there any code out there that i could look at to help me?
>Thanks
Joshua,
MSGraph is quite version dependent (5 or 8). I would suggest using Excel if possible. It's better IMHO.
MSGraph5 : Samples are in solution.app. Help file is "vba_grp.hlp" in "..\windows\msapps\msgraph".
MSGraph8 (installs with Office97 and could cause headaches if client has this but you code for MSGraph5) : A sample is below. Help file is "vbagrp8.hlp" in ...\Microsoft Office\Office.
*Graphtest.prg
*!*	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

*** 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 *
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 that will be shown and size big enough." ;
      +chr(13)+"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"

			.hasdatatable = .t.
			.DataTable.HasBorderOutline = .T.
			with .datatable.font
			    .name = "Arial"
			    .size = 8
			endwith

		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