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
Duda y problema con TButtonBmp
- Joel Andujo
- Posts: 109
- Joined: Fri Oct 07, 2005 3:14 pm
- Location: Cd. Obregón, Sonora, México
- Contact:
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
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
- Joel Andujo
- Posts: 109
- Joined: Fri Oct 07, 2005 3:14 pm
- Location: Cd. Obregón, Sonora, México
- Contact:
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
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
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
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
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
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact: