Hintergrundbild in Fenster realisieren

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
blbltheworm
Beiträge: 217
Registriert: 22.09.2004 19:36
Wohnort: Auf der schönen Schwäbischen Alb

Hintergrundbild in Fenster realisieren

Beitrag 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??
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag 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 !
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag von vonTurnundTaxis »

Einen Code, der bedauerlicherweise nur mit dem Betriebssystem Windows funktioniert, findest du hier:
http://www.purebasic.fr/german/viewtopi ... 54&start=0
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag 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
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

Die Struktur schient zumindest unter PB4.0 schon vordefiniert zu sein.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

Hm, gibt es irgendwo eine Übersicht was von dem API-Zeug bereits vordefiniert ist?

Gruß Markus
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
blbltheworm
Beiträge: 217
Registriert: 22.09.2004 19:36
Wohnort: Auf der schönen Schwäbischen Alb

Beitrag von blbltheworm »

:allright: Danke an euch alle.

@bobobo: "jezd han i jo, was e brauch" :mrgreen: :mrgreen: :mrgreen:
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

@Kurzer,
mmm, eigendlich fast alles. Wenn etwas fehlt, dann gleich bescheid sagen damit es nachgepflegt werden kann. :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag 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>.
Antworten