Duda y problema con TButtonBmp

Post Reply
jmartial
Posts: 457
Joined: Tue Mar 14, 2006 7:26 pm

Duda y problema con TButtonBmp

Post by jmartial »

Hola,

Viendo el código de esta clase (TButtonBmp), he visto que la data ::hBitmap no se destruye en ningún momento. ¿Se destruye en otro lugar de FWH o pierde recursos?

Y otra cosa que se me plantea es cambiar el bitmap por otro en tiempo de ejecución, pero no he visto un método que lo haga, tipo ChangeBitMap(cNewBmp)

¿Forma de implementarlo? ¿existe algo para hacerlo?

Un Saludo,
Joaquín
User avatar
Joel Andujo
Posts: 109
Joined: Fri Oct 07, 2005 3:14 pm
Location: Cd. Obregón, Sonora, México
Contact:

Post by Joel Andujo »

Joaquín Yo lo hago de esta manera

oBtn:SetBmp('Borr1')
oBtn:cToolTip:='Borrar'
oBtn:refresh()

y a la clase le agregale el siguiente método :

METHOD SetBMP() // Jaam

Saludos y espero te ayude
Joel Andujo

Code: Select all

*----------------------------*
METHOD SetBMP( cBitMap )  CLASS TButtonBmp
 local hBitMap
 if valtype( cBitMap )== 'C'
    hBitMap:=if( file(cBitMap),ReadBitmap( 0, cBitMap), LoadBitmap( GetResources(), cBitmap))

    ::hBitmap:={hBitmap, hBitmap, hBitmap, hBitmap}
 else
    for i=1 to 4
       if valtype(cBitMap[i])='U'; cBitMap[i]:=cBitMap[1] ; endif
       ::cBitmap[i]:=cBitMap[i]
       ::hBitmap[i]:=if( file(cBitMap[i]), ReadBitmap(0, cBitmap[i]), LoadBitmap( GetResources(), cBitmap[i] ) )
    next
 endi

 ::Refresh()
return Nil
jmartial
Posts: 457
Joined: Tue Mar 14, 2006 7:26 pm

Post by jmartial »

Joel,

Creo que te estás equivocando, has puesto:

::hBitmap:={hBitmap, hBitmap, hBitmap, hBitmap}

y ::hBitmap es un número no un array de números, me parece que eso era la clase TbtnBmp , yo estoy preguntando por la nueva clase que tiene estilo XP.


Gracias de todas formas,
Joaquín
User avatar
Joel Andujo
Posts: 109
Joined: Fri Oct 07, 2005 3:14 pm
Location: Cd. Obregón, Sonora, México
Contact:

Post by Joel Andujo »

Si Joaquín, de ahi lo tome como ejemplo y me funciona bien, con la
ButtonB.prg de Rossine apariencia XP

saludos
Joel Andujo
jmartial
Posts: 457
Joined: Tue Mar 14, 2006 7:26 pm

Post by jmartial »

Antonio,

Confirmado, la clase TButtonb no destruye el bitmap, me gustaría saber cuales son los pasos para no perder recursos.

He probado a añadir estos métodos, pero no sé si son correctos, aunque creo que funcionan:

METHOD UnLoadBmp() INLINE If(::hBitmap != 0, DeleteObject( ::hBitmap ),),::hBitmap:=0

METHOD Destroy() INLINE ::UnLoadBmp(),Super:Destroy()
METHOD End() INLINE ::Destroy() , Super:End()


Un Saludo,
Joaquín
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Joaquín,

Con esto debe ser suficiente:

METHOD End() INLINE DeleteObject( ::hBitmap ), Super:End()
regards, saludos

Antonio Linares
www.fivetechsoft.com
jmartial
Posts: 457
Joined: Tue Mar 14, 2006 7:26 pm

Post by jmartial »

Antonio,

Ya hice eso pero con un msginfo() y nunca lo mostraba, sin embargo poniendo el msginfo() en el DESTROY lo mostraba perfectamente.


Pruebaló y me dices, me da la impresión que sólo en el End(), se pierden recursos.

METHOD End() INLINE msginfo( "End no se muestra"), DeleteObject( ::hBitmap ), Super:End()


METHOD Destroy() INLINE msginfo( "Destroy SÍ se muestra"), DeleteObject( ::hBitmap ), Super:Destroy()


Un Saludo y gracias,
Joaquín
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Joaquín,

Cierto, tienes razón, ha sido un lapsus por mi parte:

METHOD Destroy() INLINE DeleteObject( ::hBitmap ), Super:Destroy()
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply