FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Uso de TGraph (fwh1204) y problema con fuentes - Solucionado
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Uso de TGraph (fwh1204) y problema con fuentes - Solucionado
Posted: Fri May 23, 2014 07:44 AM
Buenos días amigos, estoy usando la clase TGraph incorporada en Fivewin para Harbour (v.1204) y me veo en la necesidad de, en un mismo diálogo, crear y borrar en múltiples ocasiones el gráfico ya que según los parámetros del usuario cambian las series y otros parámetros que no puedo actualizar sin crear de nuevo la gráfica. Esto no supone ningún problema salvo que cuando se realiza repetidas veces los tipos de letra de mi aplicación (botones y buttonbar) pierden la configuración.
He montado un pequeño ejemplo basado en el samples\graph.prg en el que si pulsamos repetidamente el botón "Pintar" veremos cómo el cambio de letra afecta al botón pero no al say que tenemos justo debajo. El botón que he puesto "BOTON PARA COMPROBAR FONT" también se ve afectado cuando se refresca.

Code (fw): Select all Collapse
#include "Fivewin.ch"
#include "TGraph.ch" 


Function Main() 

    LOCAL oDlg, oGraph , oSay

    DEFINE DIALOG oDlg; 
           SIZE 600, 500 

    @ 0, 0 BUTTON "Pintar" ACTION PintaGrafica (@oGraph, oDlg ) OF oDlg
    @ 0,10 BUTTON "BOTON PARA COMPROBAR FONT" ACTION MsgInfo ("Nada") OF oDlg
    @ 1, 1 SAY oSay PROMPT "PRUEBA DE TEXTO PARA COMPROBAR FONT" OF oDlg
    
    ACTIVATE DIALOG oDlg  CENTER 

Return (nil)

Function PintaGrafica( oGraph, oDlg )

  If Valtype (oGraph) == "O"
    oGraph:End()
    SysRefresh()
  Endif
  
  @ 5, 5 GRAPH oGraph; 
           SIZE 450, 400; 
           TYPE 1; 
           YVALUES 3D XGRID YGRID XVALUES LEGENDS  OF oDlg

    oGraph:aSeries = { { "Serie 1", CLR_CYAN , , },;
                       { "Serie 2", CLR_YELLOW, 2, .T. },;
                       { "Serie 3", CLR_HRED, 3, .F. } }


    oGraph:aData = { { 14280, 20420, 12870, 25347, 7640 },; 
                     { 8350, 10315, 15870, 5347, 12340 },; 
                     { 12345, -8945, 10560, 15600, 17610 } } 

    oGraph:nClrX = CLR_GREEN 
    oGraph:nClrY = CLR_RED 

Return (nil)



¿Alguna sugerencia?
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: Uso de TGraph (fwh1204) y problema con fuentes
Posted: Fri May 23, 2014 08:01 AM
Parece ser que el problema viene en el Método Destroy() de la clase. Si no se destruye ::ofont funciona bien. Aunque no acabo de entender el porqué se produce este efecto ...

Code (fw): Select all Collapse
METHOD Destroy() CLASS TGraph
   LOCAL nI
   FOR nI = 1 TO LEN(::aFont)
      ::aFont[nI]:End()
   NEXT nI
   if ::oBrush != nil
      ::oBrush:End()
   endif
   /*
   if ::oFont != nil
      ::End()
   endif
   */
   Super:End()
RETURN (Nil)


Con esta parte comentada funciona bien.
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: Uso de TGraph (fwh1204) y problema con fuentes
Posted: Fri May 23, 2014 08:05 AM
Un poco más ... en el método Default() que se llama al crear la clase asigna el tipo de letra por defecto y la carga en oFont, ¿quizás esto haga que el método Destroy() se elimine también la fuente del objeto "padre"?

Code (fw): Select all Collapse
METHOD Default() CLASS TGraph
   IF ::oFont != nil
      ::SetFont( ::oFont )
   ELSE
      ::SetFont( ::oWnd:oFont )
   ENDIF
RETURN (Nil)
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: Uso de TGraph (fwh1204) y problema con fuentes
Posted: Sat May 24, 2014 05:08 PM
Bueno, pienso que el problema reportado puede considerarse un bug en el método Destroy de la clase TGraph el liberar el objeto oFont dado que lo hereda de TControl y, por lo menos en mi caso, es el objeto fuente que se usa para el resto de la aplicación. De hecho el handle del objeto oFont de la ventana principal y el de TGraph es el mismo. Así que creo que debería eliminarse esa parte de código.

Aquí la sugerencia :

Code (fw): Select all Collapse
METHOD Destroy() CLASS TGraph
   LOCAL nI
   FOR nI = 1 TO LEN(::aFont)
      ::aFont[nI]:End()
   NEXT nI
   if ::oBrush != nil
      ::oBrush:End()
   endif
   
   /*
   if ::oFont != nil
      ::End()
   endif
   */

   Super:End()
RETURN (Nil)


Cierro el tema.
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Uso de TGraph (fwh1204) y problema con fuentes - Solucionado
Posted: Mon May 26, 2014 09:36 AM

Angel,

Si ::oFont está incluido en ::aFont eso haría que se esté destruyendo más veces de la cuenta y de ahi que funcione bien tu modificación :-)

gracias!

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Uso de TGraph (fwh1204) y problema con fuentes - Solucionado
Posted: Mon May 26, 2014 09:38 AM

Ya creo saber porqué ocurre. En realidad al llamar a ::Super:End() desde él se destruye ::oFont con lo que se está haciendo una vez de más.

Tu corrección es correcta, gracias! :-)

Incluido para el próximo build de FWH,

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: Uso de TGraph (fwh1204) y problema con fuentes - Solucionado
Posted: Tue May 27, 2014 10:40 AM

:D:D

Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4

Continue the discussion