Seite 1 von 2
Hintergrundbild in Fenster realisieren
Verfasst: 07.06.2006 14:22
von blbltheworm
Hallo zusammen,
ich hab ein Fenster auf dem sich mehrere Gadgets befinden und ich würde anstelle des Standardgraus im Hintergrund gerne ein Bild anzeigen.
Jedoch hab ich bis jetzt noch keine Möglichkeit gefunden.
Wenn ich ein Imagegadget verwende sind die anderen Gadgets so lange im Vordergrund, bis ich ein anderes Fenster darüber schiebe.
Dann verschwinden die Gadgets unter dem Imagegadget.
Wenn ich mit BitBlt die Grafik auf das Fenster bringe funktioniert das solange, bis ich wieder ein anderes Fenster darüberschiebe. Dann verschwindet aber die Hintergrundgrafik.
Wenn ich die ganze Zeit neu Blte werden jedoch meine Gadgets überzeichnet.
Wie kann ich das Problem also meistern??
Verfasst: 07.06.2006 15:14
von bobobo
mit Hidewindowtrickserei macht das TextGadget weniger Probleme
Code: Alles auswählen
;PB4
Enumeration
#Window_0
#Image_0
#Button_0
#Button_1
#Button_2
#String_0
#Text_0
EndEnumeration
Image0=CreateImage(#PB_Any,600,300)
StartDrawing(ImageOutput(Image0))
Box(0,0,600,300,RGB(128,255,255))
Circle(50,50,50,RGB(255,0,0))
Circle(150,50,50,RGB(255,0,255))
StopDrawing()
If OpenWindow(#Window_0, 0, 0, 600, 300, "New window ( 0 )", #PB_Window_Invisible|#PB_Window_ScreenCentered| #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
ImageGadget(#Image_0, 0, 0, 600,150, ImageID(Image0))
DisableGadget(#image_0,1)
ButtonGadget(#Button_0, 30, 220, 60, 30, "OK")
ButtonGadget(#Button_1, 110, 220, 60, 30, "KO")
ButtonGadget(#Button_2, 210, 220, 110, 30, "Kannst Mich Mal")
StringGadget(#String_0, 450, 80, 120, 40, "irgendwas")
TextGadget(#Text_0, 150, 80, 80, 40, "schnasel")
EndIf
EndIf
HideWindow(#Window_0,0)
Repeat ; Start of the event loop
Event = WaitWindowEvent() ; This line waits until an event is received from Windows
WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget() ; Is it a gadget event?
EventType = EventType() ; The event type
Debug eventType
;You can place code here, and use the result as parameters for the procedures
If Event = #PB_Event_Gadget
If GadgetID = #Image_0
ElseIf GadgetID = #Button_0
SetGadgetText(#text_0,"OK was?")
ElseIf GadgetID = #Button_1
SetGadgetText(#text_0,"KO was?")
ElseIf GadgetID = #Button_2
SetGadgetText(#text_0,"Was denn?")
ElseIf GadgetID = #String_0
EndIf
EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
End
du kommsch von dr alb ra? isch des kähl !
Verfasst: 07.06.2006 15:35
von Kaeru Gaman
aber einem fenster selber kann man doch auch direkt ein hintergrundbild zuweisen.
wie das in PB geht, weiß ich nicht, aber ne API müsste es dafür geben.
in VB war das einfach ne eigenschaft des fensterobjekts.
Verfasst: 07.06.2006 16:57
von vonTurnundTaxis
Einen Code, der bedauerlicherweise nur mit dem
Betriebssystem Windows funktioniert, findest du hier:
http://www.purebasic.fr/german/viewtopi ... 54&start=0
Verfasst: 07.06.2006 17:26
von Kurzer
Ich klink mich mal ein
in dem von vonTurnundTaxis angegebenen Beitrag ist ja ein Beispielcode aufgeführt (hier mal auf PB 4.0 umgemünzt)...
Code: Alles auswählen
Procedure.l Window_Form1()
If OpenWindow(0,149,202,400,300, "...", #PB_Window_SystemMenu)
Brush.LOGBRUSH\lbStyle=#BS_PATTERN
Brush\lbColor=#DIB_RGB_COLORS
Brush\lbHatch=ImageID(1)
SetClassLong_(WindowID(0),#GCL_HBRBACKGROUND,CreateBrushIndirect_(Brush))
InvalidateRect_(WindowID(0), #Null, #True)
If CreateGadgetList(WindowID(0))
ProcedureReturn WindowID(0)
EndIf
EndIf
EndProcedure
LoadImage(1,"hintergrund.bmp")
If Window_Form1()
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
EndIf
Jetzt meine Fragen: Was ist das:
Brush.LOGBRUSH\lbStyle=#BS_PATTERN
Brush\lbColor=#DIB_RGB_COLORS
Brush\lbHatch=ImageID(1)
Es scheint mir eine Struktur für die API-CreateBrushIndirect Funktion zu sein (hab noch nie was mit API gemacht).
Aber woher kennt PB die Struktur? Muß man das nicht vorher mit Structure/EndStructure anlegen?
Und was macht das ".LOGBRUSH" in der ersten Zeile?
Fragen über Fragen...
Gruß Markus
Verfasst: 07.06.2006 18:05
von Zaphod
Die Struktur schient zumindest unter PB4.0 schon vordefiniert zu sein.
Verfasst: 07.06.2006 22:44
von Kurzer
Hm, gibt es irgendwo eine Übersicht was von dem API-Zeug bereits vordefiniert ist?
Gruß Markus
Verfasst: 07.06.2006 23:00
von blbltheworm
Verfasst: 08.06.2006 01:34
von mk-soft
@Kurzer,
mmm, eigendlich fast alles. Wenn etwas fehlt, dann gleich bescheid sagen damit es nachgepflegt werden kann.

Verfasst: 08.06.2006 08:32
von Shardik
@Kurzer,
die in PB vordefinierten API-Strukturen findet man in der IDE über den Menüpunkt "Werkzeuge\Strukturverzeichnis" oder die Tastenkombination <Alt> + <S>.