Page 1 of 1
Duda y problema con TButtonBmp
Posted: Thu May 18, 2006 12:04 pm
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
Posted: Thu May 18, 2006 3:58 pm
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
Posted: Thu May 18, 2006 5:05 pm
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
Posted: Thu May 18, 2006 5:48 pm
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
Posted: Tue May 23, 2006 7:59 am
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
Posted: Thu May 25, 2006 8:15 pm
by Antonio Linares
Joaquín,
Con esto debe ser suficiente:
METHOD End() INLINE DeleteObject( ::hBitmap ), Super:End()
Posted: Thu May 25, 2006 9:27 pm
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
Posted: Thu May 25, 2006 11:01 pm
by Antonio Linares
Joaquín,
Cierto, tienes razón, ha sido un lapsus por mi parte:
METHOD Destroy() INLINE DeleteObject( ::hBitmap ), Super:Destroy()