Uso de TGraph (fwh1204) y problema con fuentes - Solucionado

Uso de TGraph (fwh1204) y problema con fuentes - Solucionado

Postby AngelSalom » Fri May 23, 2014 7: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: Select all  Expand view
#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?
Last edited by AngelSalom on Sat May 24, 2014 5:08 pm, edited 1 time in total.
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
User avatar
AngelSalom
 
Posts: 708
Joined: Fri Oct 07, 2005 7:38 am
Location: Benicarló (Castellón ) - España

Re: Uso de TGraph (fwh1204) y problema con fuentes

Postby AngelSalom » Fri May 23, 2014 8: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: Select all  Expand view
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
      ::oFont: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
User avatar
AngelSalom
 
Posts: 708
Joined: Fri Oct 07, 2005 7:38 am
Location: Benicarló (Castellón ) - España

Re: Uso de TGraph (fwh1204) y problema con fuentes

Postby AngelSalom » Fri May 23, 2014 8: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: Select all  Expand view
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
User avatar
AngelSalom
 
Posts: 708
Joined: Fri Oct 07, 2005 7:38 am
Location: Benicarló (Castellón ) - España

Re: Uso de TGraph (fwh1204) y problema con fuentes

Postby AngelSalom » Sat May 24, 2014 5: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: Select all  Expand view
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
      ::oFont: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
User avatar
AngelSalom
 
Posts: 708
Joined: Fri Oct 07, 2005 7:38 am
Location: Benicarló (Castellón ) - España

Re: Uso de TGraph (fwh1204) y problema con fuentes - Solucionado

Postby Antonio Linares » Mon May 26, 2014 9: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Uso de TGraph (fwh1204) y problema con fuentes - Solucionado

Postby Antonio Linares » Mon May 26, 2014 9: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Uso de TGraph (fwh1204) y problema con fuentes - Solucionado

Postby AngelSalom » 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
User avatar
AngelSalom
 
Posts: 708
Joined: Fri Oct 07, 2005 7:38 am
Location: Benicarló (Castellón ) - España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 93 guests