Page 1 of 1

problema al cambiar dinámicamente una imagen

PostPosted: Fri Apr 06, 2012 7:29 am
by José Luis Sánchez
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,

Re: problema al cambiar dinámicamente una imagen

PostPosted: Fri Apr 06, 2012 9:48 am
by Manuel Aranda
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


 

Re: problema al cambiar dinámicamente una imagen

PostPosted: Sat Apr 07, 2012 1:27 am
by Willi Quintana
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)

 

Re: problema al cambiar dinámicamente una imagen

PostPosted: Sat Apr 07, 2012 12:06 pm
by jll-fwh
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

Re: problema al cambiar dinámicamente una imagen

PostPosted: Sat Apr 07, 2012 6:37 pm
by Antonio Linares
o simplemente:

DeleteObject( oImagePad:hBitmap )

Re: problema al cambiar dinámicamente una imagen

PostPosted: Sun Apr 08, 2012 8:04 pm
by José Luis Sánchez
Gracias, ahora funciona perfectamente.

Saludos,