Page 1 of 1

clear tImage

Posted: Tue Jul 22, 2008 9:36 pm
by Natter
Hi all !
I created image

oIm:=tImage():New()
oIm:LoadBmp(cFile)

I want delete BMP from oIm. How do it ?

Posted: Tue Jul 22, 2008 9:53 pm
by StefanHaupt
Natter,

if you want to change the image just load load a new one
oIM:SetBmp(cResName) or oIM:ReLoad( cResName, cBmpFile )

if you want to delete the bmp you can destroy the object, just write oIM := nil or you try to load an unexisting image (not tested)

Posted: Tue Jul 22, 2008 10:09 pm
by Natter
... delete the bmp you can destroy the object, just write oIM := nil or you try to load an unexisting image (not tested)"

I do it. It's not work

Posted: Wed Jul 23, 2008 3:59 am
by ralph
try this:

oIm:hbitmap := 0
oIm:Refresh()



Ralph

Posted: Wed Jul 23, 2008 6:19 am
by Natter
It's not work

Posted: Wed Jul 23, 2008 7:19 am
by mmercado
Natter wrote:It's not work
May be:

Code: Select all

PalBmpFree( oIm:hBitMap, oIm:hPalette )
Regards.

Manuel Mercado.

Posted: Wed Jul 23, 2008 9:45 am
by Enrico Maria Giordano
This is a sample:

Code: Select all

#include "Fivewin.ch"


FUNCTION MAIN()

    LOCAL oDlg, oImg

    DEFINE DIALOG oDlg;
           SIZE 700, 500

    @ 1, 1 IMAGE oImg;
           FILE "SFONDO.JPG";
           SIZE 200, 200;
           ADJUST

    @ 0,  1 BUTTON "Save";
            ACTION MSGINFO( oImg:SaveImage( "SAVED.JPG", 2 ) )

    @ 0,  7 BUTTON "Print";
            ACTION PRINT( oImg )

    @ 0, 13 BUTTON "Paste";
            ACTION ( oImg:LoadFromClipboard(),;
                     oImg:Refresh() )

    @ 0, 19 BUTTON "Load";
            ACTION ( oImg:LoadImage( , "GRIGIO.JPG" ),;
                     oImg:Refresh() )

    @ 0, 25 BUTTON "Clear";
            ACTION ( PalBmpFree( oImg:hBitMap, oImg:hPalette ),;
                     oImg:hBitmap := 0,;
                     oImg:hPalette := 0,;
                     oImg:cResName := NIL,;
                     oImg:cBmpFile := NIL,;
                     oImg:Refresh() )

    ACTIVATE DIALOG oDlg;
             CENTER

    RETURN NIL


STATIC FUNCTION PRINT( oImg )

    LOCAL oPrn

    PRINT oPrn PREVIEW MODAL
        PAGE
            oPrn:SayImage( 0, 0, oImg, oPrn:nHorzRes(), oPrn:nVertRes() )
        ENDPAGE
    ENDPRINT

    RETURN NIL
EMG

Posted: Wed Jul 23, 2008 12:58 pm
by James Bott
It looks like the TImage class needs an End() method.

James

Posted: Wed Jul 23, 2008 3:29 pm
by mmercado
James Bott wrote:It looks like the TImage class needs an End() method.
Hi James:

It has. TImage is a TBitmap subclass, then inherits Destroy Method.

Best regards.

Manuel Mercado

Posted: Wed Jul 23, 2008 4:56 pm
by Natter
Thank everybody !

@ 0, 25 BUTTON "Clear";
ACTION oImg:hBitmap := 0, ;
oImg:cBmpFile := NIL,;
oImg:Refresh() )

It work right !

Posted: Wed Jul 23, 2008 4:59 pm
by James Bott
It has. TImage is a TBitmap subclass, then inherits Destroy Method.
It is not clear if we should call the Destroy() method or the End() method. I see that TBitmap inherits from TControl which inherits from TWindow, yet I do not see the Destroy() method being called by any of those classes' End() method.

To be consistant with all the other classes, the End() method should be the one that ends the object.

James

Posted: Wed Jul 23, 2008 5:01 pm
by James Bott
Natter,

Try calling oImg:End() or oImg:Destroy() to see if one of those also works.

James

Posted: Wed Jul 23, 2008 5:21 pm
by Natter
1) calling oImg:End() - this method deleted control
2) calling oImg:Destroy() - this method not work right.

Posted: Wed Jul 23, 2008 5:36 pm
by Enrico Maria Giordano
Natter wrote:Thank everybody !

@ 0, 25 BUTTON "Clear";
ACTION oImg:hBitmap := 0, ;
oImg:cBmpFile := NIL,;
oImg:Refresh() )

It work right !
It's not enough. Please use what I put in my sample if you don't want to have resource leak.

EMG