Page 1 of 2

TGraph 2.0 de Alfredo Arteaga

PostPosted: Sat Jun 30, 2007 3:14 pm
by cuatecatl82
Uso la excelente Clase TGraph 2.0 y tengo la siguiente duda,
tengo una funcion en mi sistema que se encarga de mostrar una
grafica en la cual despliego el importe de ventas de cada uno
de los días del més, mi duda es..

Como puedo optimizar el uso del espacio a los lados de la grafica
para poder ver las barras un poco más amplias, es decir, al dibujar
todas las barras que representan la grafica quedan espacios vacios a
la izquierda y ala derecha, con lo cual, entre más barras se agregen,
más delgadas y más amontonadas se ven...

http://img525.imageshack.us/img525/152/tgraphmc8.jpg


La función pera las graficas es la siguiente..


#Include "FIVEWIN.CH"
#Include "TGRAPH.CH"

STATIC oGraph, oGlfGraph, aSerie, nTotal
STATIC aSers, aPers, nGraph, aValues, aVals
STATIC cFile, aItem, lInit, nRangoG

//----------------------------------------------------------------------------//
FUNCTION GrafVent()

nRangoG:= DAY(UltimoDia(DATE())) -> Para saber cuantos días tiene el mes
aVals:= ARRAY(nRangoG)
AFILL(aVals,0)

DEFINE DIALOG oGlfGraph RESOURCE "GRAFICA" TITLE "Estadisticas de Ventas del Mes"
REDEFINE GRAPH oGraph ID 100 OF oGlfGraph

oGraph:aYVals := {}

oGraph:cPicture := "$ 999"
oGraph:cTitX := "Importe de Ventas"
oGraph:cTitY := "Procesos"
oGraph:cTitle := "GRAFICA DE PRUEBA"
oGraph:cSubTit := "Subtitulo"

oGraph:lLegends := .T.
oGraph:lViewVal := .T.
oGraph:l3D := .T.
oGraph:lXVal := .T.
oGraph:lYVal := .T.
oGraph:lXGrid := .T.
oGraph:lYGrid := .T.
oGraph:lPopUp := .T.
oGraph:lDotted := .T.
oGraph:lTitle := .T.
oGraph:lcTitle := .T.
oGraph:lBorders := .T.
oGraph:lBordLeg := .T.

nGraph:= 1
oGraph:nPenWidth:= 2
oGraph:nXRanges := 25
oGraph:nBarD := 15
oGraph:nBarSep := 1
oGraph:nClrPane := CLR_WHITE
oGraph:nClrBack := CLR_HGRAY
oGraph:nClrGrid := CLR_BLUE
oGraph:nType := GRAPH_TYPE_BAR
oGraph:nTRight := 2


FOR N:= 1 TO nRangoG
aVals[N] := ImpoVenta(STR(N))
oGraph:AddSerie({aVals[N]}, "Día "+ALLTRIM(STR(N)), RandomRGB())
NEXT

oGlfGraph:lHelpIcon:= .F.

ACTIVATE DIALOG oGlfGraph CENTERED ON PAINT (oGraph:Refresh(.T.))

RETURN nil

Agradeciendo por su pronta respuesta...

xharbour + Fivewin 2.6[/img]

PostPosted: Sun Jul 01, 2007 2:54 am
by Francisco Horta
creo que ahi tienes que modificar la clase directamente, no he visto alguna variable para modificar eso,
salu2
paco

PostPosted: Mon Jul 02, 2007 3:25 am
by Alfredo Arteaga
Esa situación se presenta cuando las series solo tienen un valor, he aqui el ajuste:

http://www.despachoarteaga.com.mx/TGraph.Prg

PostPosted: Mon Jul 02, 2007 4:31 am
by George
Alfredo,

Tu has podido duplicar el problema que se me presenta al usar tGraph + xHarbour de que no funciona Save2Bmp() ?

Saludos,

George

Probando nueva fuente..

PostPosted: Tue Jul 03, 2007 5:09 pm
by cuatecatl82
Este es un 2 X 1

Estimado Fransico Horta:
Te comento que intente mover algunas cosas dentro del codigo fuente logrando solo descomponer el diseño de las graficas, así que opte por comentarle al autor y dicha modificacion que mando es la que deseaba.. pruebala... quedo excelente.. muy buen trabajo..

Estimado Alfredo Arteaga:
Excelente ajuste, ahora si ya quedo.. de ante mano muy adradecido, seria buena idea agregar esta modificacion a las libs de fivewin de esta fabulosa clase ya que se aprovecha al máximo todo el espacio en pantalla para ver multiples barras..

Muchas gracias a los por sus mensajes y por tomar un ratito de su tiempo
para resolver mi duda..

Saludos desde San cristobal de las Casas, Chiapas

Se me olvidaba..

PostPosted: Tue Jul 03, 2007 5:25 pm
by cuatecatl82
Para Alfredo Arteaga..

Sería mucho pedir que nos pudieras regalar un manual completo de como poder explotar al máximo su clase. me refiero a algo un poco más avanzado, de como interactuar las funciones internas, como agregar mas series desde arreglos, diferentes colores para cada uno de las barras (esto me costo un poco), dibuar lineas y puntos desde varios valores (todavia no me sale)... en fin hay mucho por descubrir y que nos cuesta como programadores tratar de encontrar si no tenemos algo que nos guie..

De ante mano muchas gracias.. :lol:

PostPosted: Tue Jul 03, 2007 6:04 pm
by sysctrl2
Yo creo que no hay mejor manual que el codigo fuente,,

saludos.

PostPosted: Tue Jul 03, 2007 6:33 pm
by George
Hola Foro,

Primeramente gracias a Alfredo Arteaga por facilitarnos esta clase.

Ahora mi pregunta:
Algun Compañero que este usando tGraph con xHarbour favor de verifcar si el metodo Save2BMP() le esta funcionando. A mi lo que me graba es un pequeño cuadrado blanco con una X roja en el medio.

Saludos,


George

La Funcion de Guardar imagenes..

PostPosted: Wed Jul 04, 2007 5:34 pm
by cuatecatl82
Esrtimado George:

Te comento que uso xHarbour build 0.45 flex con fivewin 2.6 y funciona bien, es más, la propia clase tiene una opcion que dice copiar al portapapeles o clipboard, le das click y puedes pegar la imagen en Word, Excell y hasta dentro del propio paint y funciona bien. sin problemas.. garantizado....

Que versión de xharbour y de fivewin usas, talvez tenga que ver que uses una version ya resagada, me han comentado que con las ultimas actualizaciones tambien funciona sin problemas..


Si tienes dudas comunicate conmigo
este es mi cuenta de msn danyleon82@hotmail.com

Saludos desde Chiapas

PostPosted: Thu Jul 05, 2007 1:32 am
by George
Hola Cuate,

Estoy usando xHarbour Builder Version Jan 2007 (esta es la version profesional de paga) + FWH Sep 2006 y no tengo ningun otro problema.

Lo del clipboard y Tgraph me funciona perfecto.

El *PROBLEMA* viene cuando salvo el grafico al Hard Drive. Aqui lo unico que se salva es un pequeño cuadrado blanco con un X rooja en el medio.

Pienso que talvez el problema esta en la funcion C dibwrite() de FWH. Quizas esta funcion tambien existe en xHarbour Builder y ahi se genera el problema. Solo Antonio Linares y los del Tem Xharbour me pueden aclarar esto.

Le he preguntado en varios emails a Alfredo Arteaga pero nunca he recibido respuesta de parte de el.

Es lo unico que me falta por resolver de Tgraph.


Saludos,

George

PostPosted: Thu Jul 05, 2007 6:39 am
by Alfredo Arteaga
No he recibido tus emails George, solo he visto los mensajes que haz publicado en este foro.

No tengo una respuesta satisfactoria por no contar con los elementos para hacer las pruebas, sé que la clase funciona en 16 y 32 bits, parece que eres elúnico a quien se le está presentando esta situación, espero que alguien más pueda apoyarte.

PostPosted: Thu Jul 05, 2007 3:54 pm
by George
Alfredo,

Algunas veces el anti-spam se comen los email :(

La verdad es que tu clase Tgraph es excelente y facil de usar. Gracias de nuevo por tu aporte.

No se porque me pasa ese problema al salvar el grafico, pero estoy casi seguro que no tiene nada que ver con tu clase sino con alguna funcion en C, talvez con la funcion Dibwrite. Quizas Antonio nos pueda aclarar un poco mas este asunto.

Saludos,


George

PostPosted: Thu Jul 05, 2007 4:51 pm
by Antonio Linares
George,

La solución ante la duda de que se pueda estar usando una función DibWrite() distinta a la de FWH es renombrar la de FWH por FWDibWrite(), por ejemplo.

El código fuente de DibWrite() está en source/winapi/dib.c

PostPosted: Thu Jul 05, 2007 5:44 pm
by Francisco Horta
George,
yo estoy usando sin problemas el guardar las graficas, ya sea de barras,pie,lineas y puntos, acabo de hacer mis pruebas en estos momentos y si me genera bien los archivos, asi lo tengo:

cFile:="Cmp"+oVarSys:Ano+".Bmp"
oGra:Save2Bmp(cFile)
y me va bien, adjunto el metodo de como lo uso

METHOD Save2Bmp( cFile ) CLASS TGraph

LOCAL hBmp, hDib, cDir := "\"+CurDir()
DEFAULT cFile := "TGraph.Bmp"

IF !lIsDir("\"+CurDir()+"\Graficas")
lMkDir("\"+CurDir()+"\Graficas")
ENDIF
lChDir("\"+CurDir()+"\Graficas")

hBmp := WndBitmap( Self:hWnd )
hDib := DibFromBitmap( hBmp )
DibWrite( cFile, hDib )
GloBalFree( hDib )
DeleteObject( hBmp )
IF ::nLanguage=2
MsgInfo("La imagen ha sido grabada.","Información")
ELSE
MsgInfo("Graph image save.","Info")
ENDIF
lChDir(cDir)

RETURN ( FILE( cFile ) )

salu2
paco

PostPosted: Sun Jul 15, 2007 5:51 pm
by George
Continuando con el problema......

He renombrado la funcion "dibwrite" en "dib.c", pero ahora este fichero no compila. Recibo los siguientes errores.

Code: Select all  Expand view
xHarbour Compiler build 0.99.70 (SimpLex)
Copyright 1999-2006, http://www.xharbour.org http://www.harbour-project.org/
Generating object output to 'FUNC2.obj'...

Type: C >>>xcc.exe -Fo"dib.obj" -Ot   -I"C:\xHBJan07\include" -I"C:\xHBJan07\c_include" -I"C:\xHBJan07\c_include\win" -I"C:\xHBJan07\c_include\msvc" "C:\_AML_SOFT\dib.c"<<<

C:\xHBJan07\include\ClipApi.h(71): error: Expecting an enumerator identifier.

C:\xHBJan07\include\ClipApi.h(71): error: Syntax error; found '0' expecting '}'.

C:\xHBJan07\include\ClipApi.h(463): error: Redeclaration of 'strlen' previously declared at C:\xHBJan07\c_include\string.h(30): found 'unsigned short __cdecl function(char *)' expected 'unsigned int __cdecl function(const char *)'.

C:\xHBJan07\include\ClipApi.h(464): error: Redeclaration of 'strcpy' previously declared at C:\xHBJan07\c_include\string.h(27): found 'void __cdecl function(unsigned char *, unsigned char *)' expected 'char * __cdecl function(restrict char *, restrict const char *)'.

C:\xHBJan07\include\ClipApi.h(465): error: Redeclaration of 'strcmp' previously declared at C:\xHBJan07\c_include\string.h(25): found 'int __cdecl function(char *, char *)' expected 'int __cdecl function(const char *, const char *)'.

C:\xHBJan07\include\ClipApi.h(466): error: Redeclaration of 'strcat' previously declared at C:\xHBJan07\c_include\string.h(23): found 'unsigned char * __cdecl function(unsigned char *, unsigned char *)' expected 'char * __cdecl function(restrict char *, restrict const char *)'.

C:\xHBJan07\include\ClipApi.h(511): warning: Missing type specifier.

C:\_AML_SOFT\dib.c(18): warning: Missing type specifier.

C:\_AML_SOFT\dib.c(68): error: Undeclared identifier 'READ'.

C:\_AML_SOFT\dib.c(90): warning: Local 'dwClrUsed' is not referenced.

C:\_AML_SOFT\dib.c(198): warning: Local 'hBmpOld' is not referenced.

C:\_AML_SOFT\dib.c(261): warning: Conversion from 'void *' to 'unsigned int' is undefined.

C:\_AML_SOFT\dib.c(297): error: Undefined size for 'huge' with type 'void'.

C:\_AML_SOFT\dib.c(297): error: Syntax error; found '*' expecting ';'.

C:\_AML_SOFT\dib.c(297): error: Undeclared identifier 'Bits'.

C:\_AML_SOFT\dib.c(297): error: Type error: pointer expected.

C:\_AML_SOFT\dib.c(297): error: Syntax error; found 'huge' expecting ')'.

C:\_AML_SOFT\dib.c(297): error: Illegal expression.

C:\_AML_SOFT\dib.c(297): error: Found 'int' expected a function.

C:\_AML_SOFT\dib.c(298): error: Operands of * have illegal types 'void' and 'void'.

C:\_AML_SOFT\dib.c(303): warning: Excess characters in multibyte character literal ignored.

C:\_AML_SOFT\dib.c(338): error: Redefinition of 'FWHdibwrite' previously defined at C:\_AML_SOFT\dib.c(294).

C:\_AML_SOFT\dib.c(338): error: Redeclaration of 'FWHdibwrite' previously declared at C:\_AML_SOFT\dib.c(294): found 'void __stdcall function(void)' expected 'int __cdecl function(char *, void *)'.

C:\_AML_SOFT\dib.c(339): error: Too many arguments to 'FWHdibwrite'.

C:\_AML_SOFT\dib.c(339): error: Too many arguments to 'FWHdibwrite'.

C:\_AML_SOFT\dib.c(339): error: Type error in argument 1 to '_retl'; found 'void' expected 'int'.


Type: C >>>Couldn't build: dib.obj<<<
Type: C >>>TMAKEOBJECT<<<
Type: C >>>TMAKEOBJECT:REFRESH<<<
Type: N >>>      1278<<<



Parece el que el fichero "clipapi.h" no es compatible con xHarbour Builder

Algun comentario al respecto?

Saludos,

George