problema al cambiar dinámicamente una imagen

problema al cambiar dinámicamente una imagen

Postby José Luis Sánchez » Fri Apr 06, 2012 7:29 am

Hola,
Quiero tener un control TImage que se cambie automáticamente cada vez que se cambia de registro en un browse. No quiero ajustar la imagen al tamaño del control, sino mostrar la imagen a tamaño natural. La manera de hacerlo basicamente es asociar una función al bchange del browse y cuando cambio de registro hago esto:

Code: Select all  Expand view
function RefreshMuImage()
    if File(lfn2sfn(rtrim(MU->MuImagen)))
        oMuImage:Show()
      oMuImage:LoadBmp(lfn2sfn(rtrim(MU->MuImagen)))
   else
        oMuImage:Hide()
    endif
    oMuImage:Refresh()
return nil


es decir si tengo imagen en el campo muestro el control y cargo la imagen, sino lo oculto. El problema que me he eoncontrado es que cuando muestro una imagen y a continuación una más pequeña, la pequeña queda superpuesta sobre la grande porque no tengo manera de eliminar la imagen grande. Así que me gustaría saber si hay manera de eliminar una imagen del control, es decir dejar el control en blanco, antes de poner la siguiente imagen.

Saludos,
User avatar
José Luis Sánchez
 
Posts: 539
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España

Re: problema al cambiar dinámicamente una imagen

Postby Manuel Aranda » Fri Apr 06, 2012 9:48 am

Hola Jose Luís:

A mi me funciona, aunque lo estoy haciendo de forma distinta.
Si el fichero no existiera muestro uno sin contenido, pero bueno, aún así, la imagen no se superpone, la muestra a su tamaño.
Tal vez sea que estás usando LoadBmp y yo LoadImage.
Lo tengo de la siguiente forma:

Code: Select all  Expand view

................
REDEFINE IMAGE oFoto FILENAME cFoto ID 800;
             OF oDlg UPDATE

oBrw:bChange:= {|| PonFoto(oFoto,cFoto,oDlg) }
..............

********************************************************
STATIC FUNCTION PONFOTO(oFoto,cFoto,oDlg)
********************************************************
........
//
IF !FILE(cFoto)
   cFoto="NOHAY.JPG"
ENDIF
//
   oFoto:LoadImage(,cFoto)
   oFoto:Refresh()
   oDlg:cTitle:=cTitulo
   oDlg:Refresh()

............
//
RETURN NIL


 
Un saludo,
Manuel

xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
User avatar
Manuel Aranda
 
Posts: 602
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Re: problema al cambiar dinámicamente una imagen

Postby Willi Quintana » Sat Apr 07, 2012 1:27 am

O algo asi:
Code: Select all  Expand view

................
REDEFINE IMAGE oFoto RESOURCE "NOHAYFOTO" ID 800;
             OF oDlg UPDATE

oBrw:bChange:= {|| PonFoto(oFoto,cFoto,oDlg) }
..............


STATIC FUNCTION PONFOTO(oFoto, cFoto, cDlg)
ClearImage(oFoto)                          // aqui "liberamos" la imagen en el objeto
IF !FILE(cFoto)
    oFoto:SETBMP("NOHAYFOTO")     // esto es un BMP en el archivo de recursos      
  Else
    oFoto:LoadImage(,cFoto)
    oDlg:cTitle:=cTitulo
    oDlg:Refresh()
EndIf
oFoto:Refresh()

RETURN NIL

//------------------------------------------------------------------------------------
Function ClearImage(oImg)
PalBmpFree( oImg:hBitMap, oImg:hPalette )
oImg:hBitmap  := 0
oImg:hPalette := 0
oImg:cResName := NIL
oImg:cBmpFile := NIL
oImg:Refresh()
Return(Nil)

 
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: problema al cambiar dinámicamente una imagen

Postby jll-fwh » Sat Apr 07, 2012 12:06 pm

Hola Jose Luis:

Para eliminar una imagen antes de cargar la siguiente haz:

Code: Select all  Expand view
 PalBmpFree( oImagePad:hBitmap, oImagePad:hPalette )
 oImagePad:Refresh()
 


Un saludo
JLL
Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
User avatar
jll-fwh
 
Posts: 408
Joined: Fri Jan 29, 2010 8:14 pm
Location: Meliana - Valencia

Re: problema al cambiar dinámicamente una imagen

Postby Antonio Linares » Sat Apr 07, 2012 6:37 pm

o simplemente:

DeleteObject( oImagePad:hBitmap )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41315
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: problema al cambiar dinámicamente una imagen

Postby José Luis Sánchez » Sun Apr 08, 2012 8:04 pm

Gracias, ahora funciona perfectamente.

Saludos,
User avatar
José Luis Sánchez
 
Posts: 539
Joined: Thu Oct 13, 2005 9:23 am
Location: Novelda - Alicante - España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 78 guests