• Miércoles 31 de Mayo de 2023, 04:51

Autor Tema:  Graficos en Fox Pro  (Leído 300 veces)

enbesysterm

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Graficos en Fox Pro
« en: Viernes 28 de Abril de 2023, 20:43 »
0
Hola a todos, soy novato en Fox Pro, envió un código que encontré en internet para hacer gráficos en Fox Pro.

Les dejo el código y cualquier información que encuentren al respecto, pueden compartirla con gusto.


Mostrando e imprimiendo gráficos
19 noviembre, 2017 / wrov   

Un muy buen valor agregado que podemos darle a nuestras aplicaciones es que permitan mostrar gráficos e imprimirlos.

Hay muchas formas de conseguir ese objetivo con Visual FoxPro, aquí se muestra una de esas técnicas. Para ello, haremos uso de las bibliotecas de clases visuales llamadas: FOXCHARTS.VCX y GDIPLUS.VCX y de los archivos de aplicación REPORTOUTPUT.APP y SYSTEM.APP

Estas bibliotecas de clases visuales y los archivos de aplicación debes copiarlos en la misma carpeta donde se encuentra tu archivo .EXE o en alguna de las carpetas del PATH de búsqueda.

GDIPLUS.VCX es una biblioteca gráfica y es ampliamente usada.

FOXCHARTS.VCX es la biblioteca que contiene las funcionalidades que ahora nos interesan, pero depende de GDIPLUS.VCX, por lo cual ésta debe también ser accesible.

REPORTOUTPUT.APP es requerido para tener las características de objetos de informes.

SYSTEM.APP es parte de GDIPLUS.VCX y es requerido para que los gráficos funcionen.

Nuestro primer paso será crear un formulario e insertar un control FoxCharts en ese formulario, tal y como podemos ver en la Captura 1.

Captura 1. El aspecto del formulario después de insertarle un control FoxChart

El segundo paso será cambiarle el nombre al control FoxCharts insertado. Su nombre por defecto es FoxCharts1 pero para que sea más corto será abreviado a FC1.

A continuación agregaremos un control Combobox que mostrará todos los tipos de gráficos disponibles, un botón «Grabar gráfico» para poder grabar el gráfico que esté visible y un botón «Imprimir gráfico» para poder imprimir ese gráfico.

IMPORTANTE: A la propiedad Value del Combobox debes asignarle un valor entre 1 y 17. Si no lo haces, obtendrás un mensaje de error porque por defecto la propiedad Value de un Combobox es de tipo carácter.

Captura 2. Después de insertarle un Combobox y dos botones al formulario

Listado 1. El método INIT() del formulario
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
   
  #DEFINE CLR_1 Rgb(255, 255,   0)
  #DEFINE CLR_2 Rgb(255,   0, 255)
  #DEFINE CLR_3 Rgb(255, 255, 224)
  #DEFINE CLR_4 Rgb(  0, 255, 255)
  #DEFINE CLR_5 Rgb(  0,   0, 255)
  #DEFINE CLR_6 Rgb(  0, 255,   0)
 
  *---
 
  CREATE CURSOR CURSOR_GRAFICO1 ;
    (TEM_CFILL1 C(80), TEM_LFILL1 L, TEM_LFILL2 L, TEM_NFILL1 N(20, 4), TEM_NFILL2 N(20, 4))
 
  *---
 
  INSERT INTO CURSOR_GRAFICO1 ;
        (TEM_CFILL1, TEM_LFILL1, TEM_LFILL2, TEM_NFILL1, TEM_NFILL2) ;
 VALUES ("Ene" , .F. , .F. , 1280 , CLR_1 )
 
  INSERT INTO CURSOR_GRAFICO1 ;
        (TEM_CFILL1, TEM_LFILL1, TEM_LFILL2, TEM_NFILL1, TEM_NFILL2) ;
 VALUES ("Feb" , .F. , .F. , 2150 , CLR_2 )
 
  INSERT INTO CURSOR_GRAFICO1 ;
        (TEM_CFILL1, TEM_LFILL1, TEM_LFILL2, TEM_NFILL1, TEM_NFILL2) ;
 VALUES ("Mar" , .F. , .F. , 3020 , CLR_3 )
 
  INSERT INTO CURSOR_GRAFICO1 ;
        (TEM_CFILL1, TEM_LFILL1, TEM_LFILL2, TEM_NFILL1, TEM_NFILL2) ;
 VALUES ("Abr" , .F. , .F. , 1710 , CLR_4 )
 
  INSERT INTO CURSOR_GRAFICO1 ;
        (TEM_CFILL1, TEM_LFILL1, TEM_LFILL2, TEM_NFILL1, TEM_NFILL2) ;
 VALUES ("May" , .F. , .F. , 1940 , CLR_5 )
 
  INSERT INTO CURSOR_GRAFICO1 ;
        (TEM_CFILL1, TEM_LFILL1, TEM_LFILL2, TEM_NFILL1, TEM_NFILL2) ;
 VALUES ("Jun" , .F. , .F. , 2104 , CLR_6 )
 
  *---
 
  WITH ThisForm.FC1
    .ChartsCount          = 1                && Cantidad de columnas de la tabla que tienen datos numéricos
    .FieldAxis2           = "TEM_CFILL1"     && Etiquetas que se mostrarán en el eje X
    .FieldColor           = "TEM_NFILL2"     && Colores que tendrán las series
    .FieldDetachSlice     = "TEM_LFILL1"     && Las porciones se mostrarán juntas o separadas
    .FieldHideSlice       = "TEM_LFILL2"     && Las porciones se mostrarán o se ocultarán
    .FieldLegend          = "TEM_CFILL1"     && Leyenda que se mostrará en las series
    .Fields(1).FieldValue = "TEM_NFILL1"     && Valor numérico de la serie, el que se muestra en el gráfico
    .Fields(1).Legend     = ""               && Cuando hay más de una serie aquí se pone el nombre de cada serie, para distinguirlas
    .Fields(1).Color      = RGB(0, 0, 128)   && Azul oscuro
    .Fields(1).Shape      = 1                && Estrella
    .SourceAlias          = "CURSOR_GRAFICO1"
    .SubTitle.Caption     = "Compras del primer semestre"
    .Title.Caption        = "Mi Gran Empresa S.A."
    .Visible              = .T.
    .xAxis.Caption        = "Meses"
    .yAxis.Caption        = "en dólares"
    .DrawChart()
  ENDWITH
ThisForm.Combo1.Value = 1
=DODEFAULT()
 
RETURN
*
*

Los valores ingresados en CURSOR_GRAFICO1 son un ejemplo, tú debes obtener y colocar los valores correctos en el campo TEM_NFILL1. Similarmente, los colores puestos en la columna TEM_NFILL2 también son un ejemplo, tú puedes poner cualquier color que te guste.

Y desde luego no hace falta que tu cursor se llame CURSOR_GRAFICO1 ni que los campos se llamen TEM_CFILL1, TEM_NFILL1, TEM_NFILL2, etc.

Listado 2. El método LOAD() del formulario
1
2
3
4
5
6
7
   
  _REPORTOUTPUT = FULLPATH("REPORTOUTPUT.APP")
 
  DO SYSTEM.APP
 
RETURN
*
*

Listado 3. El método INIT() del Combobox
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
   
  This.AddProperty("aCharts[1]")
 
  DIMENSION This.aCharts(17)
 
  WITH This
    .aCharts( 1) = " 1 - Torta "
    .aCharts( 2) = " 2 - Rosca "
    .aCharts( 3) = " 3 - Barras apiladas-completas "
    .aCharts( 4) = " 4 - Puntos "
    .aCharts( 5) = " 5 - Líneas "
    .aCharts( 6) = " 6 - Area "
    .aCharts( 7) = " 7 - Barras simples "
    .aCharts( 8) = " 8 - Barras múltiples "
    .aCharts( 9) = " 9 - Barras apiladas "
    .aCharts(10) = "10 - Área apilada "
    .aCharts(11) = "11 - Barras en 3D "
    .aCharts(12) = "12 - Barras simples horizontales "
    .aCharts(13) = "13 - Barras múltiples horizontales "
    .aCharts(14) = "14 - Barras apiladas horizontales "
    .aCharts(15) = "15 - Barras apiladas horizontales completas"
    .aCharts(16) = "16 - Área apilada completa "
    .aCharts(17) = "17 - Barras horizontales emparejadas "
    .RowSourceType = 5     && Array
    .RowSource     = "This.aCharts"
  ENDWITH
 
RETURN
*
*

Listado 4. El método INTERACTIVECHANGE() del Combobox
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   
LOCAL lnChart
 
  lnChart = This.Value
 
  IF lnChart == 2 THEN    && Rosca
    ThisForm.FC1.Shadow = .F.
  ENDIF
 
  IF lnChart == 16 THEN    && No funciona, siempre muestra un mensaje de error
    RETURN
  ENDIF
 
RETURN
*
*

Listado 5. El método VALID() del Combobox
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   
LOCAL lnChart
 
  lnChart = This.ListIndex
 
  IF lnChart = 16 THEN     && No funciona, siempre muestra un mensaje de error
    RETURN
  ENDIF
 
  WITH ThisForm.FC1
    .ChartType = lnChart
    .DrawChart()
  ENDWITH
 
RETURN
*
*

Listado 6. El método CLICK() del botón «Grabar gráfico»
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   
LOCAL lcImgFormatTypes, lcFile
 
  lcImgFormatTypes = "BMP;JPG;GIF;PNG;TIF;EMF"
 
  lcFile = PutFile("Grabar imagen como...", "", lcImgFormatTypes)
 
  IF Empty(lcFile) THEN     && Nombre de archivo inválido
    RETURN (.F.)
  ENDIF
 
  ThisForm.FC1.SaveToFile(lcFile)
 
RETURN
*
*

Listado 7. El método CLICK() del botón «Imprimir gráfico»
1
2
3
4
5
6
7
8
9
10
11
   
PRIVATE oFoxChart
 
  SET REPORTBEHAVIOR 90
 
  oFoxChart = ThisForm.FC1.ChartCanvas
 
  REPORT FORM FoxChartsView PREVIEW NOWAIT
 
RETURN
*
*

Algunos ejemplos:

Captura 3. Un gráfico de torta mostrado en el formulario

Captura 4. Un gráfico de rosca mostrado en el formulario

Captura 5. Un gráfico de líneas mostrado en el formulario

Captura 6. Un gráfico de barras simples mostrado en el formulario

Captura 7. Un gráfico de barras simples pero mostradas horizontalmente

Conclusión:

Las aplicaciones que pueden mostrarles gráficos a los usuarios tienen un plus, porque como sabemos «un gráfico vale más que mil palabras». En este artículo hemos visto lo fácil que resulta mostrar gráficos de buena calidad.

El control FOXCHART tiene muchísimas más opciones y ya queda a tu cargo investigarlas, incluir esas opciones en este artículo del blog ya lo hubiera alargado demasiado. Pero con lo visto hasta aquí ya tienes para mostrar gráficos vistosos a tus usuarios.

Artículos relacionados:

El índice del blog VFPavanzado
https://vfpavanzado.wordpress.com/2017/10/14/el-indice-del-blog-vfpavanzado/

Descargas:

http://www.mediafire.com/file/35343hrepd5dm31/GR%C3%81FICOS.ZIP

Nota: Este código NO es mio, solo comparto y dejo los links para descarga con la fuente.