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