If you haven't been trying out the VFPX project FoxCharts , or you tried but were a little frightened by how to implement it, here's some code that I wrote up quickly to build a nice little pie chart.
I call it GenPie and it gets called with any table and it will summarize it for you.
DO GenPie with "issues","cstatus","1","","Count of Issues"
or
DO genpie WITH HOME()+"SAMPLES\DATA\ORDERS","to_country","order_amt","","Orders"
The code essentially creates a form, drops FoxCharts on it and then uses a built-in cursor to create the chart. You can also pass it a Filter (before the title) and the starting color (in RGB).
DO genpie WITH HOME()+"SAMPLES\DATA\ORDERS","to_country","order_amt","","Orders",RGB(255,150,255)
Here's a sample:
LPARAMETERS tcTable,tcDirField,tcSizeField,tcFilter,tcTitle,tnStartColor
PUBLIC ox
ox = CREATEOBJECT("form")
IF EMPTY(tcTitle)
tcTitle = tcTable
ENDIF
ox.newobject("foxcharts","foxcharts","foxcharts")
ox.foxcharts.width = ox.width
ox.foxcharts.height = ox.height
IF EMPTY(tcFilter)
tcFilter= ".T."
ENDIF
SELECT &tcDirField,CAST(SUM(&tcSizeField) as numeric) as ntotal,COUNT(*) as ncnt FROM (tcTable) WHERE &tcFilter GROUP BY 1 INTO TABLE x
ox.foxcharts.sourcealias = "X"
ox.foxcharts.fieldxaxis = tcDirField
ox.foxcharts.visible = .t.
ox.foxcharts.ChartsCount=2
ox.foxcharts.fieldvalue1 = "ntotal"
ox.foxcharts.fieldvalue2 = "ncnt"
ox.foxcharts.Legend2="# Orders"
ox.foxcharts.Legend1="Total "
ox.foxcharts.ChartType = 1
ox.foxcharts.FieldLegend = tcDirField
ox.foxcharts.fieldcolor = ""
ox.foxcharts.colortype = 3
IF EMPTY(tnStartColor)
tnStartColor = RGB(255,0,0)
ENDIF
ox.foxcharts.color1 = tnStartColor
ox.foxcharts.Title.Caption = tcTitle
ox.foxcharts.SubTitle.Caption = "Pie"
ox.foxcharts.yaxis.Caption=tcTable
ox.foxcharts.FontName = "Verdana"
ox.FoxCharts.ShowValuesonShapes = .T.
ox.foxcharts.DrawChart()
ox.foxcharts.visible = .t.
ox.show()
*!* logif = _SCREEN.system.Drawing.Imaging.ImageFormat.Bmp
*!* ox.foxcharts.oBmp.Save("x1.bmp",logif)
It's really easy and even though there are tons of options with it, this piece of code may make it a little easier to work with. If you notice the commented piece out just above, you can easily save the output as a bitmap.
FoxCharts totally rocks!
I call it GenPie and it gets called with any table and it will summarize it for you.
DO GenPie with "issues","cstatus","1","","Count of Issues"
or
DO genpie WITH HOME()+"SAMPLES\DATA\ORDERS","to_country","order_amt","","Orders"
The code essentially creates a form, drops FoxCharts on it and then uses a built-in cursor to create the chart. You can also pass it a Filter (before the title) and the starting color (in RGB).
DO genpie WITH HOME()+"SAMPLES\DATA\ORDERS","to_country","order_amt","","Orders",RGB(255,150,255)
Here's a sample:
LPARAMETERS tcTable,tcDirField,tcSizeField,tcFilter,tcTitle,tnStartColor
PUBLIC ox
ox = CREATEOBJECT("form")
IF EMPTY(tcTitle)
tcTitle = tcTable
ENDIF
ox.newobject("foxcharts","foxcharts","foxcharts")
ox.foxcharts.width = ox.width
ox.foxcharts.height = ox.height
IF EMPTY(tcFilter)
tcFilter= ".T."
ENDIF
SELECT &tcDirField,CAST(SUM(&tcSizeField) as numeric) as ntotal,COUNT(*) as ncnt FROM (tcTable) WHERE &tcFilter GROUP BY 1 INTO TABLE x
ox.foxcharts.sourcealias = "X"
ox.foxcharts.fieldxaxis = tcDirField
ox.foxcharts.visible = .t.
ox.foxcharts.ChartsCount=2
ox.foxcharts.fieldvalue1 = "ntotal"
ox.foxcharts.fieldvalue2 = "ncnt"
ox.foxcharts.Legend2="# Orders"
ox.foxcharts.Legend1="Total "
ox.foxcharts.ChartType = 1
ox.foxcharts.FieldLegend = tcDirField
ox.foxcharts.fieldcolor = ""
ox.foxcharts.colortype = 3
IF EMPTY(tnStartColor)
tnStartColor = RGB(255,0,0)
ENDIF
ox.foxcharts.color1 = tnStartColor
ox.foxcharts.Title.Caption = tcTitle
ox.foxcharts.SubTitle.Caption = "Pie"
ox.foxcharts.yaxis.Caption=tcTable
ox.foxcharts.FontName = "Verdana"
ox.FoxCharts.ShowValuesonShapes = .T.
ox.foxcharts.DrawChart()
ox.foxcharts.visible = .t.
ox.show()
*!* logif = _SCREEN.system.Drawing.Imaging.ImageFormat.Bmp
*!* ox.foxcharts.oBmp.Save("x1.bmp",logif)
It's really easy and even though there are tons of options with it, this piece of code may make it a little easier to work with. If you notice the commented piece out just above, you can easily save the output as a bitmap.
FoxCharts totally rocks!
Comments