Ver la Versión Completa : [PowerCOBOL + COM/OLE] Uso del ChartControl de Codejock
Kuk
28 de mayo de 2015, 20:47
El chart de Codejock es algo que me ha encantado. Para poder usarlo, lo principal es crear uno de los estilos visuales dinamicamente via COM, si no lo hacemos, no se visualiza nada. Para ello, tenemos que hacer:
En REPOSITORY:
CLASS COM AS "*COM"
Luego en donde sea necesario, por ejemplo en "Opened" del Form que va a mostrar el Chart.
Para crear un estilo (por ejemplo el ChartAreaSeriesStyle) del Chart via COM, hacemos lo siguiente (todos los estilos posibles los podeis ver en el ejemplo que se instala para VB) :
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TXT PIC X(50).
01 CHART-STYLE OBJECT REFERENCE COM.
01 COB-CAPA OBJECT REFERENCE POW-COBJECT.
01 OBJ-CAPA OBJECT REFERENCE COM.
PROCEDURE DIVISION.
*> CREAMOS ESTILO EN DINAMICO
MOVE "Codejock.ChartAreaSeriesStyle.15.0.1" TO TXT
INVOKE COM "CREATE-OBJECT" USING TXT RETURNING CHART-STYLE
*> AÑADIMOS PRIMERA CAPA DE CHART
INVOKE "Series" OF "Content" OF ChartControl1 "Add"
USING "CAPA1" RETURNING COB-CAPA
*> CONVERTIMOS LA CAPA CREADA EN COM
CALL "POWERCONVTOCOM" USING COB-CAPA RETURNING OBJ-CAPA
*> APLICAMOS ESTILO
INVOKE OBJ-CAPA "SET-STYLE" USING CHART-STYLE
*> AÑADIMOS TEXTO DE ENCABEZADO DEL CHART
INVOKE "Titles" OF "Content" OF ChartControl1 "Add" USING "Datos del año"
*> SI QUEREMOS USAMOS PIEL OSCURA DEL ESTILO
INVOKE "Appearance" OF "Content" OF ChartControl1 "SetAppearance" USING "BLACK"
*> AÑADIMOS DATOS EN LA CAPA (0 = CAPA1, SI AÑADIMOS OTRA SERIA "Item"(1) ETC)
INVOKE "Points" OF "Item"(0) OF "Series" OF "Content" OF chartcontrol1 "Add" USING "Dato Nº1" 1000
INVOKE "Points" OF "Item"(0) OF "Series" OF "Content" OF chartcontrol1 "Add" USING "Dato Nº2" 589
INVOKE "Points" OF "Item"(0) OF "Series" OF "Content" OF chartcontrol1 "Add" USING "Dato Nº3" 1544
INVOKE "Points" OF "Item"(0) OF "Series" OF "Content" OF chartcontrol1 "Add" USING "Dato Nº4" 879
Resultado aqui en la imagen 1. El resto son ejemplos de apariencias.
Los 6 y 7 son 3D, movibles en ejecucion por raton.
Fito
6 de julio de 2021, 18:03
Holaaaa:
Estoy usando este chart para hacer unas estadísticas, y no logro poner las etiquetas del eje X en ángulo.
Alguien lo ha probado?
Saludos
Fito....
Paulo
27 de diciembre de 2021, 15:05
Hola.
Estou a tentar alterar o tamanho da fonte do titulo ("Title"), mas não estou a conseguir.
Alguém sabe como o fazer?
Estou a usar a versão 18.6.0 do codejock.
Gracias
Paulo
27 de diciembre de 2023, 15:31
Hola a todos
Alguem sabe o codigo para não mostrar as labels ?
Gracias
951
Kuk
28 de diciembre de 2023, 11:44
@Paulo, se hace así:
move pow-false to "Visible" OF "Label" OF "Style" OF "Item"(0) OF "Series" OF "Content" OF chartcontrol1
Paulo
1 de enero de 2024, 01:56
Gracias Kuk
Fito
11 de marzo de 2024, 13:45
Hola Amigos:
Se puede hacer una gráfica más extensa que el tamaño de la ventana? que se pueda hacer scroll?
Saludos
Fito...
Kuk
11 de marzo de 2024, 18:03
@Fito, creo que lo hace automáticamente cuando ve que los datos ya no caben, pero no lo hacen todas las vistas sino solo en las del tipo Bar: https://forum.codejock.com/chartcontrol-issues-34solved-14_topic17500.html
Dim Diagram As ChartDiagram2D
Set Diagram = ChartControl.Content.Series(0).Diagram
Diagram.AllowScroll = True
'Diagram.AllowZoom = True 'Optional
Diagram.AxisX.Range.ViewAutoRange = False
Diagram.AxisX.Range.ViewMaxValue = 5 (number of bars visible in view)
En Cobol es así:
01 COB-DIAG OBJECT REFERENCE POW-COBJECT.
01 OBJ-DIAG OBJECT REFERENCE COM.
01 OBJ-AXIS OBJECT REFERENCE COM.
01 OBJ-RANG OBJECT REFERENCE COM.
01 VERDAD PIC X VALUE "1".
01 FALSO PIC X VALUE "0".
01 numBars PIC 9 value 3.
...
*> Scrollable
move "Diagram" OF "Item"(0) OF "Series" OF "Content" OF chartcontrol1 to COB-DIAG
CALL "POWERCONVTOCOM" USING COB-DIAG RETURNING OBJ-DIAG
invoke OBJ-DIAG "get-AxisX" returning OBJ-AXIS
invoke OBJ-AXIS "get-Range" returning OBJ-RANG
invoke OBJ-DIAG "set-AllowScroll" using VERDAD
invoke OBJ-RANG "set-ViewAutoRange" using FALSO
invoke OBJ-RANG "set-ViewMaxValue" using numBars
En numBars hay que poner cuántas barras quieres que se vean, a partir de ahí habrá que usar el scroll.
Lo he probado y funciona.
Fito
12 de marzo de 2024, 15:06
Hola Carlos:
Lo voy a probar. Para zafar lo hice manualmente, metí el control adentro de un Frame y dos barras de scroll afuera, entonces mediante un cálculo agrando el control y después con las barras resto o sumo a las propiedades Top y Left. Bien casero :mola:
Otra cosa. No me puse a investigar, pero los valores sobre las barras, cuando son grandes los pone en notación científica, Me gustaría que salieran tal cual son. Ahora en la Argentina los importes son muy grandes debido a la inflación.
Muchas gracias
Saludos
Fito...
Kuk
12 de marzo de 2024, 22:05
@Fito, lo único que he encontrado es esto pero no hay respuestas: https://forum.codejock.com/display-big-double-numbers-in-scientific-notation_topic24074.html
También he trasteado el Chart Builder que se instala con los OCX para ver las propiedades y no encuentro ninguna que hable de ello...
Se me ocurre que para el gráfico no necesitas demasiada precisión, así que puedes truncar/acortar las últimas 2 o 3 cifras y poner una "K" de kilo (miles), en plan en vez de 15.000.000 poner 15.000K o algo así.
Fito
13 de marzo de 2024, 14:52
Hola Carlos:
JUNTOS SOMOS DINAMITA.....:mola::mola::mola::mola:
Gracias a tu ejemplo, empecé a probar y conseguí lo que quería.
Para configurar los valores de las barras hay que llegar a una propiedad llamada Categoría de la Etiqueta...
move 1 to "Category" of "Format" of "Label" of "Style" of "Item"(wserie) of "Series" of "Content" of Grafico
Y para Configurar el Eje Y de la misma manera lo tuve que hacer por COM (como pusiste en tu ejemplo anterior)
01 COB-DIAG OBJECT REFERENCE POW-COBJECT.
01 OBJ-DIAG OBJECT REFERENCE COM.
01 OBJ-AXIS OBJECT REFERENCE COM.
01 OBJ-FORMAT OBJECT REFERENCE COM.
01 OBJ-LABEL OBJECT REFERENCE COM.
01 wcateg pic 9 value 1.
.........
move "Diagram" of "Item"(wserie) of "Series" of "Content" of Grafico to COB-DIAG
call "POWERCONVTOCOM" using COB-DIAG returning OBJ-DIAG
invoke OBJ-DIAG "get-AxisY" returning OBJ-AXIS
invoke OBJ-AXIS "get-Label" returning OBJ-LABEL
invoke OBJ-LABEL "get-Format" returning OBJ-FORMAT
invoke OBJ-FORMAT "set-Category" using wcateg
y voilá. Funciona a la perfeccion.
Gracias Caritos (genio total)
Saludos.
Fito...
Kuk
13 de marzo de 2024, 17:12
@Fito, me alegro amigo!!!
Qué versión estás usando? Yo tengo la 15.0.1 y lo de move 1 to "Category" of "Format" ... no me deja. Y por el Chart Builder me parece que me da otra cosa....
No sé, lo mismo tengo que trastearlo. En todo caso lo importante es que ha funcionado. :bien:
Fito
13 de marzo de 2024, 22:01
Hola @Kuk,
La Versión que tengo es la 20.3.0
Ahora me queda ver si puedo manipular el ancho de la barra...
Saludos
Fito...
Kuk
14 de marzo de 2024, 11:17
@Fito, ah vale, es una bastante superior a la que tengo yo.
Te aconsejo a que vayas mirando este tipo de cosas en el Char Builder primero, ahí te salen todas la opciones. ;)
Fito
2 de mayo de 2024, 19:00
Hoa Amigos:
Ya me funciona perfecto el gráfico, Ahora viene el momento de imprimirlo. Puedo hacer tres cosas, grabarlo como bmp, imprimirlo directamente o mostrar una vista preliminar. Las tres funciones andan, pero tengo un inconveniente. Siempre toma la parte del gráfico que se ve en la ventana. Mi gráfico ocupa más que la ventana que se muestra, hace scroll (gracias a la ayuda de @Kuk, ).
Mientras escribo esto, se me ocurre cambiar el tamaño de la ventana justo antes de immprimir, lo voy a probar, pero no creo que sea la solución que estoy buscando.
Me gustaría poder manejar más los parámetros de impresión, por ejemplo apaisarla, darle un tamaño que se vean bien los datos y lo que falte lo vaya pasando a otra hoja.
Me parece que estoy pidiendo mucho.
Saludos
Fito...
Kuk
3 de mayo de 2024, 12:59
@Fito, me parece que lo más fácil será guardarlo como BMP (en temporales por ejemplo) y luego imprimirlo vía SO.
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.