Button auf Bitmap Problem

Moderator: Moderatoren

Antworten
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Button auf Bitmap Problem

Beitrag von Rudolf »

Hallo,
ich habe ein Problem mit Buttons auf Bitmap. Wenn ich ein Bitmap Static verwende und darauf Buttons darstelle, dann werden diese nicht angzeigt, erst wenn ich mit der Maus darüberfahre erscheinen sie und bleiben auch. Auch andere Static auf dem Bitmap machen Probleme. Kann man hier die Z Order irgendwie festlegen oder zumindest über eine Funktion die Elemente auf dem Bitmap refreshen oder in den Vordergrund bringen.
Grüße
Rudolf

Code: Alles auswählen

     @ 1,0 DCSTATIC TYPE XBPSTATIC_TYPE_BITMAP  OBJECT oVarPad:oStaticBG  SIZE 800,700 PIXEL ID "STATICBG"


     oVarPad:oBmpBG := xbpBitmap():new():create()
     DCBITMAP oVarPad:oBmpBG PARENT oVarPad:oStaticBG
     oVarPad:oBmpBG:loadfile("pad.png")

     @ 27,15    DCPUSHBUTTONXP CONFIG oSys:oCfgButton  CAPTION "F1 = Speichern" size 20,2 OBJECT oBt1 ACTION {||}  PARENT oVarPad:oStaticBG 
     @ 27,_NCOL DCPUSHBUTTONXP CONFIG oSys:oCfgButton  CAPTION "F2 = Anzeige"   size 20,2 OBJECT oBt2 ACTION {||}  PARENT oVarPad:oStaticBG 
     @ 27,_NCOL DCPUSHBUTTONXP CONFIG oSys:oCfgButton  CAPTION "F3 = Reset"     size 20,2 OBJECT oBt3 ACTION {||}  PARENT oVarPad:oStaticBG 
     @ 27,_NCOL DCPUSHBUTTONXP CONFIG oSys:oCfgButton  CAPTION "ESC = Abbruch"  size 20,2 OBJECT oBt4 ACTION {||}  PARENT oVarPad:oStaticBG 
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Button auf Bitmap Problem

Beitrag von Tom »

Hallo, Rudolf.

Das Problem wird von DCBITMAP verursacht. Dieses Objekt ist ein eigenes Objekt, das auf dem Static liegt. Es überlagert die Buttons, die aber in den Vordergrund treten, wenn Du sie mit der Maus erwischst (was eigentlich ein Fehler ist). Ansonsten wird jedes Mal, wenn irgendwas vom Dialog neu gezeichnet werden muss, ein DC_BitmapDraw() auf der Bitmap ausgelöst, was ein Neuladen der Bitmap (::DataLink des DC_XbpBitmap-Objekts) und Neuzeichnen auf dem Parent (oVarPad:oStaticBG bei Dir) bewirkt. Die Pushbuttons verschwinden dadurch, und zwar ganz egal, in welcher Reihenfolge die Objekte erzeugt werden.

Die Lösung besteht darin, direkt Statics vom Typ "XBPSTATIC_TYPE_BITMAP" zu verwenden und mit einer Caption zu versehen, ohne ein DC_XbpBitmap zu überlagern:

Code: Alles auswählen

@ 1,0 DCSTATIC TYPE XBPSTATIC_TYPE_BITMAP  OBJECT oVarPad:oStaticBG  SIZE 800,700 PIXEL ID "STATICBG" EVAL {||oVarPad:StaticBG:SetCaption(oVarPad:oBmpBG:loadfile("pad.png"))}
(oder so, mag Tippfehler enthalten)
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Button auf Bitmap Problem

Beitrag von Tom »

Hier der korrigierte, getestete und funktionierende Code:

Code: Alles auswählen

oBmp := XbpBitmap():New():Create()
oBmp:LoadFile(cFileWithPath)

@ 0,0 DCSTATIC TYPE XBPSTATIC_TYPE_BITMAP SIZE 500,500 PIXEL OBJECT oBitmap EVAL {||oBitmap:SetCaption(oBmp)}

@ 5,1 DCPUSHBUTTONXP CAPTION 'Test' SIZE 7,1 PARENT oBit

DCREAD GUI FIT ADDBUTTONS
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Button auf Bitmap Problem

Beitrag von Tom »

Geht noch einfacher, ohne EVAL:

Code: Alles auswählen

...BITMAP ... CAPTION oBmp
Herzlich,
Tom
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: Button auf Bitmap Problem

Beitrag von Rudolf »

Hallo Tom,
vielen Dank, funktioniert ! Nur wird das Bitmap Objekt nicht an der richtigen Position (oben links) positioniert, aber das finde ich noch raus, Hauptsache meine Objekte werden wieder richtig angezeigt.
Grüße
Rudolf
Antworten