Memvar in Callback zur Laufzeit

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Memvar in Callback zur Laufzeit

Beitrag von AUGE_OHR »

hi,

wenn ich z.B. folgendes hab :

Code: Alles auswählen

oDlg := XbpDialog():new( AppDesktop(),, aPos, aSize, , .F.)
...
oDlg:Resize := {|aOld,aNew| DlgMainResize(aOld, aNew, oDlg, aoChild)
oDlg:create()
...
oBMP := XbpBitmap():new():create()
IF FILE("LOGO.BMP")
   oBMP:LoadFile("LOGO.BMP")
ELSE
   oBMP:load( , 4000 )
ENDIF
...
oLogo          := XbpStatic():new(oDlg:drawingArea ,,aPos,aSize)
oLogo:type     := XBPSTATIC_TYPE_BITMAP
oLogo:caption  := BMP2BMP(oBMP,aSize)
oLogo:create()
...
AADD(aoChild,oStatbar)                       // add Childs to Array
AADD(aoChild,oPB)                            // add Childs to Array
AADD(aoChild,oBMP)                           // add Childs to Array
AADD(aoChild,oLogo)                          // add Childs to Array
AADD(aoChild,oAnzeig)                        // add Childs to Array
AADD(aoChild,oWMP)                           // add Childs to Array
AADD(aoChild,oStep)                          // add Childs to Array
AADD(aoChild,oSlow)                          // add Childs to Array
AADD(aoChild,oBar)                           // add Childs to Array
AADD(aoChild,oSpin)                          // add Childs to Array
...
ich nehme also alle ChildList() Objecte in ein Array auf. Nun will ich zur
Laufzeit das Bitmap wechseln.

Code: Alles auswählen

FUNCTION NewBitMap(oObj,aoChild, ...)
LOCAL oBMP, aSize
...
oBMP := XbpBitmap():new():create()         // create Logo
IF oBMP:load( , nRes )
   aoChild[CH_BMP] := oBMP
   aSize := oObj:currentSize()
   oObj:Setcaption( BMP2BMP(aoChild[CH_BMP],aSize) )
Das ist auch soweit ok und wird korrekt angezeigt , aber beim ":resize"
kommt bei :

Code: Alles auswählen

PROCEDURE DlgMainResize( aOldSize, aNewSize, oMainDlg ,aoChild)
...
aoChild[CH_LOGO]:Setcaption( BMP2BMP(aoChild[CH_BMP],aNewSize) )
leider nur ein "schwarz" ... :(

Das passiert nicht wenn ich am Anfang ein Bitmap lade und es NICHT
zur Laufzeit ändere.

Wie bekomme ich Xbase++ dazu das er zur Laufzeit das "geänderte"
Bitmap beim ":resize" übernimmt ?

gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Memvar in Callback zur Laufzeit

Beitrag von AUGE_OHR »

hi,

ok, also hier die Auflösung :

Code: Alles auswählen

...
oBMP := XbpBitmap():new():create()
IF FILE("LOGO.BMP")
   oBMP:LoadFile("LOGO.BMP")
ELSE
   oBMP:load( , 4000 )
ENDIF
AADD(aoChild,oBMP)                           // add Childs to Array
...
soweit alles klar. Hab ein Bitmap Object im Array und kann das
dann "überall" einsetzen.

Code: Alles auswählen

FUNCTION NewBitMap(oObj, aoChild, ...)
LOCAL oBMP, nRes
...
oBMP := XbpBitmap():new():create()         // create Logo
IF oBMP:load( , nRes )
   aoChild[CH_BMP] := oBMP
...
ENDIF
so hier "create" ich nun eine "neues" Bitmap Object und versuche "das"
nun in das Array zu speichern ... ABER

Code: Alles auswählen

...
oBMP:destroy()
oBMP := NIL
RETURN NIL
das gehörte noch dazu ... :(

Code: Alles auswählen

aoChild[CH_LOGO]:Setcaption( BMP2BMP(aoChild[CH_BMP],aNewSize) )
somit wird das dann auch nichts ... warum ?

naja, ich hab irgendwie an "Variabeln" gedacht d.h. ich weise dem Array
einen "Wert" zu ( aoChild[CH_BMP] := 123 ), aber das tu ich eben NICHT !

Ich weise dem Array ja ein Bitmap OBJECT zu und wenn ich das "später"
dann ":destroy()" dann hab ich auch nichts mehr im Array ...

Also hab ich nun mein Bitmap Object in meinen "Stack" ausgelagert
und greife auf "das" OBJECT zu statt ein weiteres in "NewBitMap()"
neu zu "create"n.

gruss by OHR
Jimmy
Antworten