Creando gráficos con MS GRAPH en VFP
Por Antonio Muñoz de Burgos y Caravaca.
© Copyrights 1996 by FoxPress, All rights reserved
FoxPress, Julio-Agosto 1996( www.datapress.com)
El Fuente del ejemplo en ( www.datapress.com)
El crear gráficos con MS-Graph desde VFP no reviste mayor dificultad que la de crear una consulta,
configurando el destino de tipo gráfico y seguir los pasos del asistente una vez realizada la consulta. Esto es
válido si sólo queremos un gráfico concreto en un momento dado. Cuando lo que necesitamos es crear gráficos
de este tipo dentro de nuestra aplicación, puede que utilizar el asistente nos resulte a veces un poco incómodo,
sobre todo si ya tenemos predeterminado el tipo concreto de gráfico que nos interesa para cada grupo de datos.
Por defecto, el asistente para gráficos aparece siempre que ejecutamos una instrucción del tipo
DO (_GENGRAPH) WITH 'Consulta'
_GENGRAPH es una variable de memoria del sistema que especifica la aplicación utilizada para enviar los resultados de consultas a Microsoft Graph. En el caso del VFP 3.0, si examinamos el valor de esta variable nos encontraremos con algo así:
?_GENGRAPH
C:\VFP\WIZARDS\WZGRAPH.APP
que es la aplicación encargada de recopilar los parámetros necesarios para crear el objeto OLE tipo MS_Graph a
partir de las cuestiones que aparecen en el wizard.
Si lo que queremos es que se cree el gráfico sin necesidad de asistente, basta pasar a la aplicación _GENGRAPH
todos los parámetros que requiere e indicarle que no nos muestre el asistente. Veamos cuáles son estos
parámetros y cómo realizar la llamada.
La llamada tendrá la siguiente forma:
DO (_GENGRAPH ) WITH <param1> [,<param2>]...[,< param9 >]
| Donde los nueve parámetros tienen el
siguiente significado: param1 : | "AUTOGRAPH" Tipo: (caracter ) Este parámetro es indispensable para informar que no salga el asistente para gráficos. Sólo se nos preguntará el nombre del fichero donde guardar el gráfico que se genere, en caso de no haber introducido el parámetro < param8 >. |
| param2 : | Tipo (numérico) * (ver lista) Aquí introducimos el tipo de gráfico que queremos utilizar. Ms-Graph tiene una galería de 15 tipos de gráficos. |
| param3 : | SubTipo ( numérico ) * (ver lista) Cada galería (tipo) tiene determinados subtipos, en la lista se puede ver los subtipos de cada tipo. |
| param4 : | "Título" ( caracter ) Título que aparece en el gráfico a generar. |
| param5 : | Serie filas o columnas ( lógico ) [.T.] y [.F.] respectivamente. Le indicamos si queremos que la serie aparezca en filas o columnas. |
| param6 : | Leyenda ( [.T. ] o [.F. ] ) Si queremos que aparezca la leyenda ponemos verdadero, de lo contrario falso. |
| param7 : | AutoFormato ( [.T.] o [.F.] ) El autoFormato es importante que lo pongamos como .T. ya que de esta manera se acepta el tipo y subtipo que hemos establecido, para generar así el gráfico que deseamos, si lo ponemos .F. se salta el salta el tipo y subtipo y se toma el establecido por defecto en Ms-Graph. |
| param 8: | "Nombre del fichero donde se almacena el gráfico" ( caracter ) Con este parámetro ya personalizamos del todo la generación del gráfico, ya que aquí damos el nombre del fichero donde queremos que se actualice el gráfico. |
| param9 : | No visualizar el gráfico ( MODIFY GENERAL ) ( lógico ) Lo más interesante con este parámetro es que le podemos decir que no muestre el gráfico generado, poniendo .T., de tal forma que mostremos el gráfico vía OLE, en el formulario y página deseada, cuando queramos. |
*VALORES PARA TIPO y SUBTIPO
| Galerías | Tipo | SubTipos o formatos |
| Areas Barras Columnas Líneas Circular Anillos Radar XY- Dispersión Combinado Áreas 3D Barras 3D Columnas 3D Líneas 3D Circular 3D Superficie 3D | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 1,2,3,4,5 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7,8,9,10 1,2,3,4,5,6,7 1,2,3,4,5,6,7 1,2,3,4,5,6 1,2,3,4,5,6 1,2,3,4,5,6 1,2,3,4,5,6,7,8 1,2,3,4,5,6 1,2,3,4,5,6,7,8 1,2,3,4 1,2,3,4,5,6,7 1,2,3,4 |
NOTA :
Para ver a que gráfico pertenece cada subtipo ( formato ), ejecutar Ms-Graph. En el menú seleccionar 1ª Formato y 2ª
AutoFormato, se verá cada tipo con sus respectivos formatos.
Al ejecutar la orden DO (_GENGRAPH ) WITH... se crea una tabla con el nombre especificado en el
param8 que contiene un único campo de tipo general en el que está contenido el objeto OLE MS_Graph. Este
objeto lo podemos manipular cortando y pegando o bien insertarlo en un campo general de alguna de nuestras
tablas con un REPLACE WITH.
Para ilustrar la forma de generar gráficos personalizados desde programa, hemos creado un ejemplo con tres
tipos de gráficos a partir de la tabla ORDERS.DBF que viene en el directorio C:\VFP\SAMPLES\DATA del VFP
3.0 .
El ejemplo consiste en un formulario con un grupo de tres opciones (una para cada gráfico) y un control
Dependiente de Ole (OLE Bound Control) en el que visualizamos el gráfico. Al pulsar cada una de las opciones,
creamos una tabla o cursor con los datos a visualizar y ejecutamos el DO (_GENGRAPH) indicando el nombre
de la tabla de salida, que en nuestro ejemplo se llama GRAFICOS.DBF.
La aplicación que genera el gráfico nos creará un campo en la tabla GRAFICOS llamado OLEGRAPH. Para
visualizar el gráfico generado, basta asignar como propiedad ControlSource del OLEBoundControl el campo
OLEGraph de la tabla GRAFICOS, que hemos incluido en el entorno de datos del formulario. No importa si la
tabla existe o no, ya que en caso de existir, simplemente agrega un nuevo registro al final.
Una vez hemos pulsado una opción y generado el gráfico en el formulario, podemos hacer doble click sobre el
gráfico para acceder al menú de opciones de MS-Graph, desde el cual podremos modificar las opciones de tipo
de gráfico y parámetros de visualización. Al hacer click fuera del area del gráfico, se cerrará el menú,
actualizándose el gráfico en la tabla.
Veamos el código del ejemplo y los gráficos que se consiguen con cada opción:
_________________________________________
* Método Form1.Dibuja()
_________________________________________
select orders
do case
case Thisform.optiongroup1.Value = 1
select to_country as País,;
sum(order_amt) as Cantidad;
from orders ;
group by to_country ;
order by to_country ;
into cursor Ventas
do (_gengraph) with 'autograph',2,1,'Ventas ',.T.,.T.,.T.,'graficos'

case Thisform.optiongroup1.Value = 2
select year(order_date) as año,;
sum(order_amt) as cantidad ;
from orders ;
group by año ;
into cursor Ventas
do (_gengraph) with 'autograph',12,6,'Ventas ',.F.,.F.,.T.,'graficos'
case Thisform.optiongroup1.Value = 3
set talk off
select distinct year(order_date) as año;
from orders ;
order by año ;
into cursor lista_años
scan
lcAño = lista_años.año
lcCursor = STR(lcAño,4)
select month(order_date) as mes, sum(order_amt) as cantidad ;
from orders ;
where year(order_date)=lcAño ;
order by mes ;
group by mes ;
into cursor lcCursor
endscan
select lista_años
go top
lcAño ='Año_'+str(lista_años.año,4)
create table compara (Mes N(2,0))
select lista_años
scan
lcAño = 'Año_'+str(lista_años.año,4)
alter table compara ;
add column &lcAño Y
endscan
for i=1 to 12
append blank in compara
lcMes = i
replace compara.Mes with lcMes ;
in compara
select lista_años
scan
lcAño = lista_años.año
lcColumn = 'Año_'+str(lcAño,4)
select orders
Sum(order_amt) ;
for year(order_date)= lcAño ;
and mont(order_date)= lcMes ;
to cantidad
replace compara.&lcColumn with ; cantidad in compara
endscan
endfor
select compara
do (_gengraph) with 'autograph',4,5, ;
'Comparativa de Ventas por Años' ,;
.F.,.T.,.T.,'graficos',.T.
use in compara
use in lista_años
use in lcCursor
delete file compara.dbf
endcase
select graficos
go bottom
if used('ventas')
use in ventas
endif
thisform.refresh()
_______________________________
Del mismo modo que hemos incluido el gráfico en un formulario podríamos haberlo hecho en un report
obteniendo copias impresas de los gráficos que siempre añaden cierta vistosidad a los informes
Antonio Muñoz es programador de GENOCRON de Sevilla (España). Ha realizado aplicaciones multimedia con Visual
FoxPro