Liberar BMP y FONT ->> SOLUCIONADO

Re: Liberar BMP y FONT

Postby rolando » Sat Aug 03, 2013 2:35 pm

Antonio,

Perdón por no ser más explícito.

Me refiero a lo indicado por el checkres:

65 BMP 67442497 (b)LISTOTRABAJOSXBRO 2313

O sea que no cierra un bmp al salir del dialog.

Tu me consultaste: "Puedes mostrar el código de la línea 2313 ?"

Y, esta es la línea en cuestión:

Code: Select all  Expand view
redefine button oBtnEditar ;  
  id 4003 OF oDlg ;
  action if(aListar[oBrw:nArrayAt,8] <> -1 , ;
  (EditoTrabajos(alltrim(str(aListar[oBrw:nArrayAt,8])), 40 , oDlg) ) , ;
  (msgsound(cLocalRaiz+"\AUDIO\campanada.wav") , oBrw:setfocus()) )


gracias.

Rolando :D
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Liberar BMP y FONT

Postby rolando » Sat Aug 03, 2013 2:42 pm

Antonio,

Uso como lo explicas, pero son dialogs NOWAIT. Cuando los cierro, SOLAMENTE los fonts de los dialogs quedan sin cerrar. A estos fonts exclusivamente les aplico esta función y los cierra. No entiendo el porqué, ¿quizás porque son dialogs NOWAIT?, pero la cuestión es que a estos fonts no los cierra si no le aplico esta función.

Gracias.

Rolando :D
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Liberar BMP y FONT

Postby Antonio Linares » Sat Aug 03, 2013 6:34 pm

Rolando,

Este ejemplo aqui funciona correctamente, por favor pruébalo, gracias:

Code: Select all  Expand view
#include "FiveWin.ch"

function Main()

   local oDlg, oFont

   SetResDebug( .T. )

   DEFINE FONT oFont NAME "Verdana" SIZE 0, -12

   DEFINE DIALOG oDlg FONT oFont

   ACTIVATE DIALOG oDlg NOWAIT CENTERED

   MsgInfo( "a non modal dialog" )

   oDlg:End()
   
   oFont:End()

   CheckRes()
   WinExec( "notepad checkres.txt" )

return nil
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: Liberar BMP y FONT

Postby rolando » Sat Aug 03, 2013 8:44 pm

Antonio,

Probé el ejemplo como lo sugieres y por supuesto que funciona. Lamentablemente la aplicación que desarrollé es muchísimo más compleja.

Como dije tengo los dialogs en una DLL.

Desde una window principal, se llama por menú a un dialog, desde este se llama a otro dialog NOWAIT y, desde este último dialog NOWAIT se llama a otros dialogs NOWAIT. Todo esto rodeado de infinidad de botones, brushes, etc.. Lo que trato de plasmar es que es bastante complejo todo por la cantidad de controles de los dialogs.

Lo único que me dio resultado para cerrar los fonts de los DLGs, es ejecutar la función que sugeriste en uno de los post.

Voy a seguir buscando y, si encuentro la solución, comentaré al respecto. Igual me queda todavía encontrar porque no cierrar algunos BMP's.

Como curiosidad te comento que cambiando un poco el PRG que mandaste y asignandole el font de la manera que sugeriste:

Code: Select all  Expand view
oDlg:setfont(oFont)


No cierra el oFont, pero si lo hace cuando lo asigno de la manera que lo hacía antes:

Code: Select all  Expand view
oDlg:oFont:=oFnt


Si quieres puedes probarlo:

Code: Select all  Expand view
#include "FiveWin.ch"

function Main()

   local oDlg, oFont

   SetResDebug( .T. )

   DEFINE FONT oFont NAME "Verdana" SIZE 0, -12

  // DEFINE DIALOG oDlg FONT oFont

   DEFINE DIALOG oDlg //FONT oFont

      oDlg:setfont(oFont)

   ACTIVATE DIALOG oDlg NOWAIT CENTERED

   MsgInfo( "a non modal dialog" )

   oDlg:End()

   oFont:End()

   CheckRes()
   WinExec( "notepad checkres.txt" )

return nil


Gracias.

Rolando :D
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Liberar BMP y FONT

Postby cnavarro » Sun Aug 04, 2013 5:56 pm

Antonio

Como puedo liberar un Brush que genera el MSLogo?
Code: Select all  Expand view

       MsgLogo(".\Bmps\portada512.png", 2 )                    //  ---> Linea 350
 


Detalle del CheckRes:

04/08/2013 19:49:54: BRUSH,17830657,TDIALOG:SETCOLOR(2519)->TDIALOG:NEW(194)->MSGLOGO(14)->MAIN(350)


El mismo resultado con .bmp:
Code: Select all  Expand view

       MsgLogo(".\Bmps\portada512.bmp", 2 )                    //  ---> Linea 350
 


Saludos
Last edited by cnavarro on Sun Aug 04, 2013 11:15 pm, edited 1 time in total.
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Liberar BMP y FONT

Postby rolando » Sun Aug 04, 2013 10:23 pm

Buenas tardes,

Encontré que:

--> Si uso:
Code: Select all  Expand view
oDlg:setfont(oFnt)
oBrw:setfont(oFnt)
oLbx:setfont(oFnt)
 

El oFnt:end() NO cierra el font.




--> En cambio si uso:

Code: Select all  Expand view
oDlg:oFont:=oFnt
oBrw:oFont:=oFnt
oLbx:oFont:=oFnt
 

El oFnt:end() SI cierra el font.




--> Que en dialogos NOWAIT hay que hacer oFnt:end() dos veces, una en el valid y otra antes del return
para que el font sea cerrado (para el caso del font del oDlg)



Todavía tengo por revisar una gran parte del programa que no cierra recursos (la función que estoy revisando ahora, en el dialog tiene la friolera de 160 controles en uso), pero comencé rehaciendo de a poco la functión, agregando controles de a tres y controlando que se cierre el BMP que da como no cerrado y aumenta mucho los GDI ya que es la parte del programa que más se usa.
Supongo que así encontraré donde está el fallo.

Rolando :D
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Liberar BMP y FONT

Postby cnavarro » Sun Aug 04, 2013 10:59 pm

Por si sirve de referencia

En mi caso los Font de los FolderEx no eran liberados
Solo consegui liberarlos cuando los asignaba fuera del comando.
Tanto si los asignaba con DEFINE FOLDEREX oFld ... FONT oFont PIXEL, como si no lo asignaba en el comando, y cogia el Font del dialogo al que pertenecian.
Sin embargo si asignaba el Font con:
oFld:SetFont( oFont )
Si eran liberados sin necesidad de usar los valid

En mi caso no consigo liberar los botones del ribbon que son .png

Saludos
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Liberar BMP y FONT

Postby rolando » Mon Aug 05, 2013 2:09 am

.

¡¡¡ Solucionado !!!

Gracias a todos y especialmente a Antonio por las enseñanzas.

Comento que lo que faltaba resolver era el cerrado de un BMP. Cada vez que se abría una función con un dialog que contiene muchos controles, se iba guardando un bitmap muchas veces en memoria (cuatro por cada apertura) y, como este dialog es el más utilizado por la aplicación, la cuenta de GDI subía mucho llegando a veces a "bloquear" la aplicación (junto con otros objetos que tampoco cerraban pero pude solucionar fácilmente).

La cuestión era encontrar que era lo que indicaba el checkres()

65 BMP 67442497 (b)LISTOTRABAJOSXBRO 2313

Gracias a Antonio pude ver que la (b) se refiere a que la falla está en una función que es llamada, en este caso, por la línea 2313 de la función LISTOTRABAJOSXBRO. Está línea ponía en funcionamiento la Editorepa() que era en donde estaba la falla y era un
Code: Select all  Expand view
aBitmaps:= {LoadBitmap (GetResources(),"CHECKON") , LoadBitmap (GetResources(),"CHECKOFF") }

Que había dejado de usar y olvidé borrar.

Gracias

Rolando :D
User avatar
rolando
 
Posts: 593
Joined: Sat May 12, 2007 11:47 am
Location: San Nicolás - BA - ARGENTINA

Re: Liberar BMP y FONT ->> SOLUCIONADO

Postby cuatecatl82 » Mon Aug 05, 2013 4:29 am

Antonio
Como puedo liberar un Brush que genera el MSLogo?
Código: Seleccionar todo Expandir vista
MsgLogo(".\Bmps\portada512.png", 2 ) // ---> Linea 350

Detalle del CheckRes:
04/08/2013 19:49:54: BRUSH,17830657,TDIALOG:SETCOLOR(2519)->TDIALOG:NEW(194)->MSGLOGO(14)->MAIN(350)

Saludos


Maestro Antonio:

Misma duda, no todos los fonts son liberados, en mi caso estoy trabajando con la clase TGraph nativa de FW, el cual llama internamente a los fonts, lo mismo que con la clase TWindow:

checkres.txt

Code: Select all  Expand view

04/08/2013 23:02:00: FONT,1527386396,MAIN(82)
04/08/2013 23:02:00: FONT,201986268,MAIN(86)
04/08/2013 23:02:00: FONT,1292504950,TWINDOW:GETFONT(2731)->TWINDOW:NEW(847)->MAIN(92)
04/08/2013 23:02:00: FONT,302648543,TGRAPH:REDEFINE(295)->CONSUDSK(110)->MAIN(94)
04/08/2013 23:02:00: FONT,-1559621827,TGRAPH:REDEFINE(296)->CONSUDSK(110)->MAIN(94)
   
 


Así defino mis fuentes de la línea 80 a 87 de Main():

Code: Select all  Expand view

DEFINE FONT oFontArB16 NAME   "ARIAL"      BOLD SIZE 00, 16
DEFINE FONT oFontArB12 NAME   "ARIAL"      BOLD SIZE 00, 12
DEFINE FONT oFontAri10 NAME   "ARIAL"           SIZE 06, -10  //->No se Libera (82)
DEFINE FONT oFontCom10 NAME   "COMICS"     BOLD SIZE 00, 12
DEFINE FONT oFontTaB14 NAME   "TAHOMA"     BOLD SIZE 00, 14
DEFINE FONT oFontTaB16 NAME   "TAHOMA"     BOLD SIZE 00, 16
DEFINE FONT oFontMSS06 NAME   "MS SANS SERIF"   SIZE 00, 06  //->No se Libera (86)
DEFINE FONT oFontMSS13 NAME   "MS SANS SERIF"   SIZE 00, -13

DEFINE WINDOW   oWnd TITLE  "Catalogador de Discos"  //->No se Libera (92)
...
 


Las fuentes las establesco así:

Code: Select all  Expand view

oDlg:oFont   := oFontCom10
oBtn1:oFont  := oFontTaB16
oBtn2:oFont  := oFontTaB16

 

y las libero después del Activate

Code: Select all  Expand view

ACTIVATE WINDOW      oWnd MAXIMIZED

oFontMSS06:END()
oFontTaB14:END()
oFontTaB16:END()
oFontMSS13:END()
oFontArB16:END()
oFontAri10:END()
oFontArB12:END()
oFontCom10:END()

Return nil
 


Como liberar las fuentes cuendo son invocadas internamente por las clases de FW..?

Saludos..
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Liberar BMP y FONT ->> SOLUCIONADO

Postby elvira » Mon Aug 05, 2013 8:29 am

Amigos,

Acabo de poner checkres en mi aplicación y me dice que los siguientes no son liberados, y son de controles internos de Fivewin:

Code: Select all  Expand view
05-08-2013 10:21:03: FONT,-838200666,TWINDOW:GETFONT(2752)->TWINDOW:NEW(851)->MAIN(274)
   
   
05-08-2013 10:21:03: FONT,621417608,TRICHEDIT:REDEFINE(391)->ALTAS(350)


05-08-2013 10:25:21: BRUSH,-451931077,TRPANEL:REGISTER(691)->TRPANEL:NEW(51)->TRIBBONBAR:NEW(355)->MAIN(285)
   
05-08-2013 10:25:21: BMP,1694831359,TBITMAP:REDEFINE(497)->ACTIVARPROGRAMA(305)
   
05-08-2013 10:25:21: FONT,1175065340,TURLLINK:REDEFINE(105)->ACTIVARPROGRAMA(315)

 



¿No se supone que antes de salir Fivewin debería liberar todo automáticamente?.

Muy agradecida ;).
elvira
 
Posts: 515
Joined: Fri Jun 29, 2012 12:49 pm

Re: Liberar BMP y FONT

Postby cnavarro » Wed Aug 07, 2013 6:26 pm

cnavarro wrote:Antonio

Como puedo liberar un Brush que genera el MSLogo?
Code: Select all  Expand view

       MsgLogo(".\Bmps\portada512.png", 2 )                    //  ---> Linea 350
 


Detalle del CheckRes:

04/08/2013 19:49:54: BRUSH,17830657,TDIALOG:SETCOLOR(2519)->TDIALOG:NEW(194)->MSGLOGO(14)->MAIN(350)


El mismo resultado con .bmp:
Code: Select all  Expand view

       MsgLogo(".\Bmps\portada512.bmp", 2 )                    //  ---> Linea 350
 


Saludos


+1
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Liberar BMP y FONT ->> SOLUCIONADO

Postby Antonio Linares » Fri Aug 09, 2013 7:25 am

La función MsgLogo() usa un diálogo no modal, que para que se cierre adecuadamente ha de ser llamado desde una ventana principal, ó se inicia un proceso de cierre de la aplicación (si solo hay una ventana y se cierra, Windows inicia el proceso de cierre de la aplicación) y en este caso, parece ser que el VALID de la caja de diálogo no modal no se evalúa. Aqui hay un ejemplo real de uso de MsgLogo() desde una aplicación y podeis comprobar como limpia correctamente todo:

Code: Select all  Expand view
#include "fivewin.ch"

Static MainWnd

Function Main()

   SetResDebug( .T. )

   DEFINE WINDOW MainWnd FROM 1, 1 TO 22, 75 ;
      TITLE "Test" ;
      MENU BuildMenu()
     
   ACTIVATE WINDOW MainWnd MAXIMIZED ;
      VALID MsgYesNo( "Want to end ?" )
   
   FErase( "checkres.txt" )
   CheckRes()
   WinExec( "notepad checkres.txt" )
   
Return NIL

Function BuildMenu()

   local oMenu

   MENU oMenu
      MENUITEM "&Try" ACTION Try( )

      MENUITEM "E&xit" ACTION MainWnd:End()
   ENDMENU
   
Return oMenu

Function Try()

   Local oDlg

   DEFINE DIALOG oDlg TITLE "Non modal dialog"
   
   @ 2, 2 BUTTON "&End" OF oDlg ACTION oDlg:End( )
   
   ACTIVATE DIALOG oDlg CENTERED NOWAIT ;
      VALID MsgYesNo( "Want to close it ?" )

return NIL


Tambien comentar que los recursos que muestra checkres.txt son liberados por FWH al cerrar la aplicación. Es decir, CheckRes() nos informa de lo que quedó y que FWH tuvo que liberar de forma automática.
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: Liberar BMP y FONT ->> SOLUCIONADO

Postby Antonio Linares » Fri Aug 09, 2013 7:30 am

Elvira,

FWH crea una serie de recursos, que luego han podido reutilizarse en la aplicación y variar asi su contador de uso, y de aqui el no ser liberados correctamente. Por supuesto, tambien pudiera ser un fallo de FWH a localizar y arreglar, pero llevamos mucho tiempo probando y controlando esto en FWH, aún asi para eso estan estas funciones para ayudarnos a mejorar la aplicación :-)

Es necesario un pequeño ejemplo, como el que yo he proporcionado, que reproduzca la pérdida. 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: Liberar BMP y FONT ->> SOLUCIONADO

Postby cnavarro » Fri Aug 09, 2013 3:41 pm

Antonio
Tenia usted toda la razon. La pérdida será debida a otro brush que tenga en la aplicacion pero aparecia el mensaje que adjunté y eso me despistó.
He hecho un ejemplo pequeño con una MDICHILD y el MSGLOGO y el fichero checkres.txt aparece vacio.
Inclui en la ventana un BRUSH y no lo cerré despues del ACTIVATE y aparecía el mismo mensaje que puse en mi pregunta anterior
Añadí el oBrush:End() y el checkres.txt aparece vacio.
Gracias una vez mas
Saludos
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Previous

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 57 guests