Gráficos
http://www.fpress.com/
grafico.zip
Por Luis Requesens
El hacer
gráficos de barras, tarta, etc... en Fox nunca ha sido algo fácil. Con la pérdida
del GENGRAPH los ejemplos que proponía MS siempre eran con el MS GRAPH cuya
distribución no estaba permitida y que se instala con el Office. Los clientes
deberían tener el Office para poder ver los gráficos deseados.
Un
ejemplo de uso del MS GRAPH se publicó por esta revista hace ya algún tiempo
mediante una carta al director en el que en un código claro, sencillo y simple
se mostraba como usarlo. Por su interés y por si alguien usa este sistema lo
trascribo:
public pantalla
pantalla = createobject("form")
pantalla.addobject("objeto", "olecontrol",
"msgraph.chart.8")
pantalla.objeto.top = 0
pantalla.objeto.left = 0
pantalla.objeto.height = pantalla.height
pantalla.objeto.width = pantalla.width
pantalla.visible = .t.
pantalla.objeto.visible = .t.
pantalla.lockscreen = .t.
pantalla.objeto.object.application.chart.charttype = -4100
pantalla.objeto.object.application.datasheet.range("00").value
= ""
pantalla.objeto.object.application.datasheet.range("01").value
= "Pedro"
pantalla.objeto.object.application.datasheet.range("02").value
= "Luis"
pantalla.objeto.object.application.datasheet.range("A0").value
= "Enero"
pantalla.objeto.object.application.datasheet.range("A1").value
= 25
pantalla.objeto.object.application.datasheet.range("A2").value
= 40
pantalla.objeto.object.application.datasheet.range("B0").value
= "Febrero"
pantalla.objeto.object.application.datasheet.range("B1").value
= 35
pantalla.objeto.object.application.datasheet.range("B2").value
= 55
pantalla.objeto.object.application.datasheet.rows("4").delete
pantalla.objeto.object.application.datasheet.rows("5").delete
pantalla.objeto.object.application.datasheet.columns("4").delete
pantalla.objeto.object.application.datasheet.columns("4").delete
pantalla.objeto.object.application.chart.hastitle = .t.
pantalla.objeto.object.application.chart.charttitle.text =
"Mi gráfico"
pantalla.lockscreen = .f.
No
obstante, la limitación que tienes, como se comentó antes es que el usuario
tiene que tener instalado el Office para que funcione.
Pero Visual FoxPro 7.0
ha abierto una puerta al instalarse con el ActiveX llamado MS Chart Control.
Este
control si lo quieres poner manualmente en un formulario debes hacer lo
siguiente:
1.- Crea
un formulario nuevo.
2.- En
la barra de herramientas de controles del formulario selecciona Controles
ActiveX (OleControl).
3.- En
la pantalla de insertar objeto selecciona la opción tercera (inserta objeto)
4.-
Localiza un control llamado Microsoft Chart Control. Seleccionalo y dale a
Aceptar.
5.- Este
es el control que vamos a usar:
Si pulsas con el botón derecho del ratón
sobre el objeto verás la opción de Propiedades de este control y podrás
adaptarlo a tus necesidades. Este control muestra gráficos de diverso tipo en 2
y tres dimensiones.
Pero como lo que seguramente quieres es ver
un código de ejemplo te pongo el siguiente que no es muy largo:
public pantalla
pantalla = createobject("form")
pantalla.addobject("objeto", "olecontrol",
"MSChart20Lib.MSChart.2")
pantalla.objeto.top = 0
pantalla.objeto.left = 0
pantalla.objeto.height = pantalla.height
pantalla.objeto.width = pantalla.width
pantalla.objeto.visible = .t.
pantalla.objeto.chartType = 1
pantalla.objeto.Title.Text = "Pedidos"
pantalla.objeto.ColumnCount = 1
pantalla.visible = .t.
pantalla.lockscreen = .t.
lnRow = 1
WITH pantalla.objeto.Object
.RowCount = 0
.RowLabelCount = 0
.RowCount = 12
.RowLabelCount = 1
FOR x =1 to 12
.Column = 1
.Row = lnRow
.RowLabel = 0 + x
.Data = 10 + x
lnRow = lnRow+1
ENDFOR
ENDWITH
pantalla.lockscreen = .f.
Que nos
da el siguiente gráfico:
En el
código puedes ver que la instrucción
pantalla.addobject("objeto",
"olecontrol", "MSChart20Lib.MSChart.2")
me añade
el gráfico en tiempo de ejecución (lo que antes he hecho manualmente).
Por su
parte la siguiente isntrucción es la que nos da la opción de escoger el tipo de
gráfico:
pantalla.objeto.chartType
= 1
Entretente
un rato cambiando este parámetro para ver las diversas posibilidades que se
tiene.
Entre
otras cosas puedes poner gráficos en varias dimensiones como el siguiente:
Si
quieres un ejemplo más elaborado tomando información de Bases de Datos y
jugando con diversos tipos de gráficos mira este ejemplo de gráficos que lo
tienes en los fuentes:
La parte
principal del código de este ejemplo la tienes aquí:
Con un
código relativamente parecido al anterior:
IF
!USED('order_history')
RETURN .F.
ENDIF
SELECT order_history
=REQUERY()
LOCAL lnCount, lnRow
lnCount = _TALLY
lnRow = 1
ThisForm.Text1.Value =
0
WITH
ThisForm.Olecontrol1.Object
.RowCount = 0
.RowLabelCount = 0
.RowCount = lnCount
.RowLabelCount =
lnCount
SCAN
.Column = 1
.Row = lnRow
.RowLabel = ALLTRIM(order_id)
.Data =
ord_total
lnRow = lnRow+1
ThisForm.Text1.Value
= ord_total+ThisForm.Text1.Value
ENDSCAN
ENDWITH
WITH
ThisForm.Olecontrol1
IF !.Visible
.Visible = .T.
ENDIF
ENDWITH
FoxPress – Abril de 2002
© 2002 FoxPress. All rights reserved