Generar Gráfico con FoxCharts

1,152 views
Skip to first unread message

Daniel Sánchez

unread,
Dec 19, 2015, 4:12:44 PM12/19/15
to Comunidad de Visual Foxpro en Español, Mundo Visual FoxPro
Estoy tratando de implementar la clase foxcharts, pero estoy teniendo inconvenientes con los gráficos tipo 1 y 2 el cual me genera un error, descargue la última versión desde codeplex pensando que se solucionaría mi problema, pero no doy pie con la solución, pensé que era un problema con la creación de mi gráfico mis datos o algo por el estilo, así que copie el código que trae en el ejemplo que muestra los diversos gráficos y aun así obtengo el mismo error, aquí pongo el código ejemplo en cuestión que tampoco me funciona.

CREATE CURSOR Sales( ;
CHART1 I  NULL , ;
CHART2 N (8,2) NULL , ;
CHART3 N (8,2) NULL , ;
CHART4 N (8,2) NULL , ;
CHART5 N (8,2) NULL , ;
LEGEND C (30) NULL , ;
DETACH L  NULL , ;
COLOR I  NULL , ;
HIDE_SLICE L  NULL )

INSERT INTO Sales VALUES (130, 100, 80, 55, 44, "JAN", .F., 10076365, .F.)
INSERT INTO Sales VALUES (120, 60, 40, 88, 55, "FEB", .F., 9122739, .F.)
INSERT INTO Sales VALUES (45, NULL, 75, 43, 66, "MAR", .F., 8832896, .F.)
INSERT INTO Sales VALUES (60, 70, 100, 110, 77, "APR", .F., 14528002, .F.)
INSERT INTO Sales VALUES (75, 90, NULL, 88, NULL, "MAY", .F., 11309315, .F.)
INSERT INTO Sales VALUES (110, 100, 65, 130, 100, "JUN", .F., 8567706, .F.)


SET CLASSLIB TO LOCFILE("FoxCharts.vcx")

PUBLIC oForm as Form
oForm = CREATEOBJECT("Form")
oForm.Newobject("oChart", "FoxCharts", "FoxCharts.vcx")

LOCAL loChart as FoxCharts OF "FoxCharts.vcx"
loChart = oForm.oChart

WITH loChart
.AlphaChannel = 255
.BackColor = RGB(255,255,255)
.BackColor2 = RGB(255,255,255)
.BarsSpaceBetween = 10
.BrushType = 2
.ChartsCount = 5
.ChartType = 2
.ColorType = 1
.Depth = 20
.DonutRatio = 0.50
.FieldAxis2 = 'Legend'
.FieldColor = 'Color'
.FieldDetachSlice = 'Detach'
.FieldHideSlice = 'Hide_Slice'
.FieldLegend = 'Legend'
.FontName = 'Verdana'
.Gradientlevel = 5
.Height = 444
.MarginBottom = 10
.MarginLeft = 10
.MarginRight = 10
.MarginTop = 10
.PieCompensateAngles = .T.
.PieShowPercent = .T.
.SourceAlias = 'Sales'
.Width = 902
WITH .AxisLegend2
    .FontName = 'Verdana'
ENDWITH
WITH .ScaleLegend
    .FontName = 'Verdana'
    .ForeColor = RGB(0,128,128)
ENDWITH
WITH .ShapeLegend
    .BackColor = RGB(255,255,255)
    .BackColorAlpha = 128
    .FontName = 'Verdana'
    .ForeColor = RGB(0,0,0)
ENDWITH
WITH .SideLegend
    .Alignment = 0
    .FontName = 'Verdana'
    .ForeColor = RGB(0,0,64)
ENDWITH
WITH .SubTitle
    .Alignment = 2
    .Caption = 'Chart SubTitle'
    .FontName = 'Verdana'
    .FontUnderline = .F.
ENDWITH
WITH .Title
    .Alignment = 2
    .Caption = 'Chart Main Title'
    .FontItalic = .T.
    .FontName = 'Verdana'
    .ForeColor = RGB(0,128,255)
ENDWITH
WITH .XAxis
    .Alignment = 2
    .FontName = 'Verdana'
ENDWITH
WITH .YAxis
    .FontName = 'Verdana'
ENDWITH
WITH .Fields(1)
    .Color = RGB(0,0,128)
    .FieldValue = 'Chart1'
    .Legend = 'GR1'
    .Shape = 5
ENDWITH
WITH .Fields(2)
    .Color = RGB(162,169,167)
    .FieldValue = 'Chart2'
    .Legend = 'GR2'
    .Shape = 8
ENDWITH
WITH .Fields(3)
    .Color = RGB(192,251,74)
    .FieldValue = 'Chart3'
    .Legend = 'GR3'
*     .Shape =  &&Custom object - Xfcgraphicspath
ENDWITH
WITH .Fields(4)
    .Color = RGB(152,51,238)
    .FieldValue = 'Chart4'
    .Legend = 'GR4'
    .Shape = 'D:\SISTEMAS\FOXGRAPHCHART\FOXCHARTS_1.20\VFPXICON.PNG'
ENDWITH
WITH .Fields(5)
    .Color = RGB(255,255,0)
    .FieldValue = 'Chart5'
    .Legend = 'GR5'
ENDWITH
    loChart.DrawChart()
loChart.Visible = .T. 
ENDWITH

oForm.Width = loChart.Width
oForm.Height = loChart.Height
oForm.Show()

Por ahora genero gráficos usando el ocx de mschart pero quiero tener un mejor control de todo como lo da la clase foxchart, así que estoy viendo en cambiar este código.

En otro hilo realice una solicitud si fuera posible adicionar otro tipo de gráfico a esta espectacular clase, pero no he recibido respuesta (ni positiva o negativa), en todo caso alguien que me pueda dar una mano al respecto lo agradecería.

Saludos

--
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047 RPM #948615385
Trujillo - Perú

P  Sugerimos no imprimir este e-mail a menos que sea absolutamente necesario. Protejamos el medio ambiente.

Angel Dario Rodriguez

unread,
Dec 19, 2015, 5:00:10 PM12/19/15
to publice...@googlegroups.com, Mundo Visual FoxPro
Eso esta fantástico, pero como puedo imprimirlo?

Daniel Sánchez

unread,
Dec 19, 2015, 6:00:26 PM12/19/15
to Comunidad de Visual Foxpro en Español
Para imprimir según la ayuda es tan fácil como esto

LOCAL loBmp as xfcBitmap
loBmp = Thisform.Foxcharts1.oBmp
loBmp.ToPrinter()

Angel Dario Rodriguez

unread,
Dec 19, 2015, 6:25:38 PM12/19/15
to publice...@googlegroups.com
Gracias mil, Daniel, lo pondre en practica.

Richard Silva

unread,
Dec 19, 2015, 8:40:11 PM12/19/15
to Comunidad de Visual Foxpro en Español
Hola Daniel,

¿Cuál es el error que arroja al ejecutarlo?

He descargado la clase y cree un nuevo prg con el código que has posteado y se ha generado el gráfico sin problemas.

Te recomiendo además la descarga del FoxChartsHelp también en VFPX, el cual es invaluable para usar e intentar aprovechar las innumerables ventajas y opciones de ésta gran clase.

Aprovecho para agradecer y felicitar a su creador y colaboradores.


--
Saludos

Daniel Sánchez

unread,
Dec 19, 2015, 10:46:41 PM12/19/15
to Comunidad de Visual Foxpro en Español
He colocado de la ayuda el siguiente código en el init de un formulario

SET TALK OFF
SET CONSOLE OFF

CREATE CURSOR sales (Chart1 n(8,2), Legend c(30), Color i)

INSERT INTO sales VALUES ( 130,  "JAN", RGB(64,64,255))
INSERT INTO sales VALUES (  80,  "FEB", RGB(32,160,64))
INSERT INTO sales VALUES ( 100,  "MAR", RGB(255,160,60))
INSERT INTO sales VALUES (  60,  "APR", RGB(0,164,128))
INSERT INTO sales VALUES ( 155,  "MAY", RGB(64,32,128))

WITH Thisform.FoxCharts1 as FoxCharts OF "FoxCharts.vcx"
* 1st step is to tell the class how many columns with data will be used
.ChartsCount = 1
.ChartType = 2 && Type of chart: Doughnut
.Depth = 15 && the 3D effect - 0 = plain chart
* Inform the class where the data will be found
.SourceAlias = "Sales"
.FieldAxis2  = "Legend" && name of the field
* .FieldColor = "Color" && name of the field - used when you choose custom colors
.FieldLegend = "Legend" && name of the field
.Fields(1).FieldValue = "Chart1"
* Setting the captions for the other legends
.Title.Caption = "My first chart"
.Subtitle.Caption = "Toys sales per month"
.YAxis.Caption = "Quantities" && used in charts that contain axes, otherwise ignored
.XAxis.Caption = "Month" && used in charts that contain axes, otherwise ignored
* The backcolor
.BackColor = RGB(255,255,255) && White
* Setting the colors
.ColorType = 2 && 0=basic, 1=custom, 2=Random colors
.DrawChart() && update the chart with the current settings
ENDWITH

Y me da el siguiente error

Imágenes integradas 1
y aquí el resto del mensaje

Imágenes integradas 2

Ahora no se ha que se deba he bajado el system.app y la clase foxchart, que puede estar generando el error.

Saludos

Daniel Sánchez

unread,
Dec 19, 2015, 10:54:53 PM12/19/15
to Comunidad de Visual Foxpro en Español

Daniel Sánchez

unread,
Dec 19, 2015, 10:59:49 PM12/19/15
to Comunidad de Visual Foxpro en Español

Daniel Sánchez

unread,
Dec 20, 2015, 8:39:43 AM12/20/15
to Comunidad de Visual Foxpro en Español
Disculpen estoy con el internet hoy sábado que se va y viene esta que falla desde la tarde.

Acabo de crear una carpeta con los archivos necesarios y e iniciado mi fox y cargado solo esas librerías y lo ha corrido perfectamente, debo suponer que debo tener algún conflicto en alguna clase o algún app que pueda tener en otro lado con otra versión lo que genera el problema, voy a tener que ponerme a buscar cual es el problema o eliminar primero los otras referencias a clases gdiplus y otros que este usando, vamos a ver como va, ojala no se malogre otra cosa por cambiar algunos archivos y deje de funcionar las cosas que si funcionaban. Les contare como me fue.

Saludos

El 19 de diciembre de 2015, 20:40, Richard Silva <rjsi...@gmail.com> escribió:

Daniel Sánchez

unread,
Dec 20, 2015, 9:38:10 AM12/20/15
to Comunidad de Visual Foxpro en Español
Estuve revisando y estas son las clases que estoy usando en mi aplicativo
Imágenes integradas 1
los amarillos son clases que no son de mi autoria, las que me generan conflicto son las system, drawing, drawing2d, text, que me parecen que son iguales a los que trae el system.app, estas las uso para capturar los forms y poder obtener una vista previa de los formularios  con este código

This.CDATAIMAGEN = ""
If  .Not. Isnull(This.System)
Local LOCAPTUREBMP As XFCBITMAP, CNAMEBMP As Character, LOTHUMBNAIL As XFCIMAGE, NALTOIMAGEN As Integer, NANCHOIMAGEN As Integer
CNAMEBMP = Sys(2023)+"\"+Sys(3)+".jpg"
LOCAPTUREBMP = This.System.DRAWING.Bitmap.FROMSCREEN(This.OFORMACTUAL.HWnd)
NALTOIMAGEN = Int(LOCAPTUREBMP.Height*0.75 )
NANCHOIMAGEN = Int(LOCAPTUREBMP.Width*0.75 )
LOTHUMBNAIL = LOCAPTUREBMP.GETTHUMBNAILIMAGE(NANCHOIMAGEN, NALTOIMAGEN)
LOTHUMBNAIL.Save(CNAMEBMP, This.System.DRAWING.IMAGING.IMAGEFORMAT.JPEG)
If File(CNAMEBMP)
This.CDATAIMAGEN = Filetostr(CNAMEBMP)
Else
This.CDATAIMAGEN = Filetostr("sinimagen.bmp")
Endif
Delete File (CNAMEBMP)
Endif

Ahora debo suponer que debería prescindir de estas clases y trabajar todo con el system.app o no!!! esa es la duda.

Saludos


Daniel Sánchez

unread,
Dec 20, 2015, 10:27:37 AM12/20/15
to Comunidad de Visual Foxpro en Español
En la clase que se encarga de capturar la imagen del form he cambiado el código y ahora el system lo cargo en la misma clase, por decirlo de un modo en su mismo entorno privado, y va bien no ha interferido en su funcionamiento.
Pero del mismo modo el chart no carga me indica que no encuentra la clase drawing la cual esta indicada en los set class to al inicio del sistema pero cuando cargo el formulario de prueba para los gráficos corriendo en producción
Imágenes integradas 1
así carga porque no tengo datos en esa fecha, pero cuando cambio los datos para visualizar el gráfico me indica esto

Imágenes integradas 2
pero como comente me indica que no encuentra la clases drawing.vcx, pero se supone que esta en la lista de los set class, y tambien incluido en el ejecutable, al ignorar me da el siguiente mensaje y archivo de error en el foxcharts.log
Imágenes integradas 3
ahora si indico la ruta de la clase el gráfico se construye sin problemas
Imágenes integradas 4

en mi entorno de desarrollo no da este aviso, construye los gráficos normalmente.

Ahora el tema es compatibilizar las clases o cambiar todo a trabajar con el system.app pero no se como quedarme con la última y que lo demás que tenia siga funcionando.

Saludos


FoxCharts.log
Reply all
Reply to author
Forward
0 new messages