Page 1 of 2

EXCESS RELEASE OF FONT

PostPosted: Mon Jan 19, 2015 4:09 pm
by mastintin
En un log del programa aparece esto :

19-01-2015 17:06:08: EXCESS RELEASE OF FONT Verdana[ hFont : 0] ( nCount : 0 )
<-TFONT:END(246) <-TCONTROL:DESTROY(2298) <-TGET:DESTROY(766) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1733) <-TGET:HANDLEEVENT(575) <-_FWH(3464) <-SENDMESSAGE(0) <-(b)TWINDOW(573)
------------------------------------------------------------

con la ultima versión de fwh ( 15.01 ) . ¿ Es un problema de la clase Tcontrol ? . Gracias.

Re: EXCESS RELEASE OF FONT

PostPosted: Mon Jan 19, 2015 4:14 pm
by cnavarro
Manuel, como se ha comentado en el foro este tipo de asignaciones suelen producir esta situacion

local oFontDlg:=oFont

Re: EXCESS RELEASE OF FONT

PostPosted: Mon Jan 19, 2015 4:41 pm
by mastintin
Pues no tengo ninguna asignacion similar en el programa .
Ademas, por si sirve de guia para encontrar el problema , al principio del programa tengo un dialogo para pass que da el error nada mas cerrarlo . si quito al final de este dialogo el ofont:end() el error deja de salir en ese punto ...

Re: EXCESS RELEASE OF FONT

PostPosted: Mon Jan 19, 2015 5:03 pm
by karinha

Re: EXCESS RELEASE OF FONT

PostPosted: Mon Jan 19, 2015 5:21 pm
by cnavarro
mastintin wrote:Pues no tengo ninguna asignacion similar en el programa .
Ademas, por si sirve de guia para encontrar el problema , al principio del programa tengo un dialogo para pass que da el error nada mas cerrarlo . si quito al final de este dialogo el ofont:end() el error deja de salir en ese punto ...


Entonces debe ser el problema que comentas en tu primer post, voy a mirar a ver si encuentro algo

Re: EXCESS RELEASE OF FONT

PostPosted: Mon Jan 19, 2015 6:21 pm
by mastintin
entonces supongamos este codigo ... como se codifica ahora ...
Supongamos un nuevo control...

oNuevo: new( ofontText, ofontTitulo )


IF oFontText == NIL
DEFINE FONT oFontText NAME "DEFAULT_GUI_FONT" SIZE 0,-12
ENDIF

IF oFontTitulo == NIL
DEFINE FONT oFontTitulo NAME "DEFAULT_GUI_FONT" SIZE 0,-16
ENDIF


::oFontTexto:= oFontTexto
::oFontTitulo:= oFontTitulo
......

Tenemos que tener en cuenta que si :
::oFontTexto:setfont(ofontTexto)
esto dará error ya que ::ofonttexto de momento no es nada y no tiene por tanto el methodo setfont()

Re: EXCESS RELEASE OF FONT

PostPosted: Mon Jan 19, 2015 7:06 pm
by cnavarro
mastintin wrote:entonces supongamos este codigo ... como se codifica ahora ...
Supongamos un nuevo control...

oNuevo: new( ofontText, ofontTitulo )


IF oFontText == NIL
DEFINE FONT oFontText NAME "DEFAULT_GUI_FONT" SIZE 0,-12
ENDIF

IF oFontTitulo == NIL
DEFINE FONT oFontTitulo NAME "DEFAULT_GUI_FONT" SIZE 0,-16
ENDIF


::oFontTexto:= oFontTexto
::oFontTitulo:= oFontTitulo
......

Tenemos que tener en cuenta que si :
::oFontTexto:setfont(ofontTexto)
esto dará error ya que ::ofonttexto de momento no es nada y no tiene por tanto el methodo setfont()


No se si te he entendido, pero yo lo haria asi

Code: Select all  Expand view

// En el metodo New
.../...

     IF oFontText == NIL
       DEFINE FONT ::oFontText NAME "DEFAULT_GUI_FONT" SIZE 0,-12
    ENDIF

  IF oFontTitulo == NIL
       DEFINE FONT ::oFontTitulo NAME "DEFAULT_GUI_FONT" SIZE 0,-16
   ENDIF

.../...
 


Code: Select all  Expand view

// Si no es en el metodo New
.../...

     IF oFontText == NIL
       if !empty( ::oFontText )
           ::oFontText:End()
       endif
       DEFINE FONT ::oFontText NAME "DEFAULT_GUI_FONT" SIZE 0,-12
    ENDIF

  IF oFontTitulo == NIL
       if !empty( ::oFontTitulo )
           ::oFontTitulo:End()
       endif
       DEFINE FONT ::oFontTitulo NAME "DEFAULT_GUI_FONT" SIZE 0,-16
   ENDIF

.../...
 

Re: EXCESS RELEASE OF FONT

PostPosted: Mon Jan 19, 2015 7:41 pm
by mastintin
Bien Cristobal , pero y si se ha asignado un font en el new y oFontText != nil ?

Re: EXCESS RELEASE OF FONT

PostPosted: Mon Jan 19, 2015 8:08 pm
by cnavarro
Manuel, mira a ver

Code: Select all  Expand view

// Si no es en el metodo New
.../...

     IF oFontText == NIL
       if !empty( ::oFontText )
           ::oFontText:End()
       endif
       DEFINE FONT ::oFontText NAME "DEFAULT_GUI_FONT" SIZE 0,-12
    ELSE
       if !empty( ::oFontText )
           ::oFontText:End()
       endif
      ::SetFont( oFontText )
    ENDIF

  IF oFontTitulo == NIL
       if !empty( ::oFontTitulo )
           ::oFontTitulo:End()
       endif
       DEFINE FONT ::oFontTitulo NAME "DEFAULT_GUI_FONT" SIZE 0,-16
    ELSE
       if !empty( ::oFontTitulo )
           ::oFontTitulo:End()
       endif
      ::oTitulo:SetFont( oFontTitulo )    // Suponemos que aqui hay otro objeto
   ENDIF

.../...
 
 

Re: EXCESS RELEASE OF FONT

PostPosted: Mon Jan 19, 2015 8:17 pm
by mastintin
si, asi si pero no del todo ...
en el new()

DEFINE FONT ::oFontTitulo NAME "DEFAULT_GUI_FONT" SIZE 0,-16 // lo iniciamos y luego
if ofonttitulo != nil
::ofonttitulo:setfont( ofonttitulo) // si viene pasado desde new lo asignamos .
endif


Ya encontré uno de los causantes ... datepicket en el methodo redefine , no esta completado como si lo está en el metodo new .... se tiene que hacer un fix de ello .

Re: EXCESS RELEASE OF FONT

PostPosted: Mon Jan 19, 2015 8:24 pm
by cnavarro
En tu ejemplo eso es lo que no entiendo,
Como puede ser el objeto oFont, la data ::oFontTitulo, ya que este objeto no tiene ese metodo

Por otra parte, en este tema, llegamos al "tan traido y llevado" encapsulamiento, y no asignar valores directamente a las datas de los objetos que creamos, ni usarlas , sino que deben existir unos metodos SETGET de cada DATA al crear la CLASE para este fin y, en el caso de que las DATAs sean objetos, como es el caso, realice el :End() del objeto antes de realizar la nueva asignacion
Pero bueno, una cosa es "predicar y otra muy distinta, dar trigo" :D y todos buscamos la ley "del minimo esfuerzo", yo el primero, claro
Si me atrevo a escribir lo anterior hoy es porque en relacion a otro tema que no tiene nada que ver con este tema el compañero Felix me ha remitido a un BLog de Biel (que ya conocia) y en un articulo habla tambien de este tema
http://bielsys.blogspot.com.es/search?u ... -results=1

Re: EXCESS RELEASE OF FONT

PostPosted: Mon Jan 19, 2015 9:19 pm
by mastintin
Pues tienes razón , el objeto font no tiene setfont , pues tendré que repensarlo ... ¿ como lo hacemos ?. Lo que si es claro es que datepick tiene un problema :-)

Re: EXCESS RELEASE OF FONT

PostPosted: Mon Jan 19, 2015 9:20 pm
by cnavarro
Dime en que linea y lo miro
Quiero decir, dime en qué tienes el problema :D :D :D

Re: EXCESS RELEASE OF FONT

PostPosted: Mon Jan 19, 2015 9:31 pm
by cnavarro
Manuel, tanto en el metodo New como en el Redefine se ha "comentado" la linea

Code: Select all  Expand view

//   ::oFont     = oFont
 


y se ha puesto en el metodo New

Code: Select all  Expand view

   ::SetFont( oFont )
 


Pero, ojo en el Metodo Redefine se ha comentado la linea pero no se ha asignado el font
Sin saber exactamente tu problema, quizas en ambos metodos, deberia ser:

Code: Select all  Expand view

if oFont = nil
   ::SetFont( oWnd:oFont )
else
  ::SetFont( oFont )
endif

 

Re: EXCESS RELEASE OF FONT

PostPosted: Mon Jan 19, 2015 9:44 pm
by mastintin
Tambien e quitado la asigancion inicial en el new ... ofont := oWnd:ofont .
Sigue existiendo otro problema por algún lado ... con este código da error si descomento el ultimo get y sino no ...¿?

Code: Select all  Expand view

  DEFINE Font oFont    name "Verdana" size 0,-12
  DEFINE font oFontCor name "Verdana" size 0,-13 bold
  DEFINE Font oFont2   name "Verdana" size 0,-14

  DEFINE DIALOG oDlg RESOURCE "cab_cli" HELPID 2 FONT ofont

  REDEFINE BITMAP oBitmap1 ID 601 RESOURCE hVar["vcBmp"] OF  oDlg pixel NOBORDER TRANSPARENT

  REDEFINE GET hObj["vFACTURA"] VAR aVar[vFACTURA] ID 102 OF oDlg ;
           COLOR nRgb(0,0,0),nRgb(255,250,200);
           WHEN (Esalta) FONT oFontCor

      hObj["vFACTURA"]:lDiscolors:= EsAlta
 
  REDEFINE GET aObj[vCLIENTE] VAR aVar[vCLIENTE] ID IDCLIENTE OF oDlg PICTURE "999999";
     BITMAP "lupa5" ;
     ACTION .t. ;
     VALID  .t. ;
     FONT oFont2 ;
     UPDATE

  aObj[vCLIENTE]:bKeyDown := { |nKey | IIF( nKey == VK_F2,(aObj[vCLIENTE]:oBtn:click(), 0 ),) }

  REDEFINE GET aObj[vRAZ] VAR aVAr[vRAZ] ID IDRAZ OF oDlg PICTURE "@!" UPDATE

//  REDEFINE GET aObj[vNOMCLI] VAR aVAr[vNOMCLI] ID IDNOMCLI OF oDlg PICTURE "@!" FONT ofont2 UPDATE
 
   REDEFINE BUTTON ID 119 OF oDlg ACTION (Grabar:=.F., oDlg:End()) FONT ofont2

    ACTIVATE DIALOG oDlg CENTERED