Reihenfolge für die Anzeige von Gadgets?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Reihenfolge für die Anzeige von Gadgets?

Beitrag von gnasen »

Ich bin vor kurzem auf Purebasic gestoßen und muss schon mal sagen, dass mir die Sprache bisher sehr gut gefällt. Da ich schon eine gewisse Prog Erfahrung habe, hab ich mich bisher sehr gut zurecht gefunden.

Allerdings hat sich mir jetzt ein relativ banales Problem gestellt, vllt ist die Frage fast schon ein wenig zu einfach, aber ich raffe es gerade irgendwie nicht....

Code: Alles auswählen

Enumeration ;Fenster
  #Window_Main
EndEnumeration

Enumeration ;Gadgets etc
  #NetworkServer
  #Text_Status_connection
  #Text_In
  #Text_out
  #Button_send
  #Image_Background
  #image0
EndEnumeration

Image0 = CatchImage(#image0, ?Image0)
DataSection
Image0:
IncludeBinary "background.jpg"
EndDataSection

OpenWindow(#Window_Main, 0, 0, 650, 450, "GWC-client", #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered| #PB_Window_SystemMenu)

If CreateGadgetList(WindowID(#Window_Main))
  
  EditorGadget(#Text_In,0,0,300,80)
  ButtonGadget(#Button_send, 385, 425, 90, 20, "send")
  EditorGadget(#Text_out, 10, 425, 330, 20)
  ImageGadget(#Image_Background, 0,0,650,450,Image0)   
  
EndIf
Und zwar gibt es Probleme mit der Darstellung der Gadgets. Je nach Anordnung verdeckt entweder das ImageGadget alle anderen Gadgets, oder während der Programmausführung werden die anderen Gadgets "unsichtbar" und erst bei anklicken sichtbar. Dies passiert, wenn man zB das Fenster ausserhalb des Bildes und zurück zieht.

Weiss jemand Rat, wäre sehr dankbar!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Gadgets haben keine Z-order, und sind nicht dafür gemacht, um einander zu überdecken.

auch in VisualBasic von Microsoft wird sowas nur emuliert.
eine Z-order ist keine native eigenschaft eines fensterelementes.

für einen fensterhintergrund kannst du auch via API direkt ein bild einsetzen.
weiß jetzt aber nich genau, wie das ging und wo hier im forum der beispielcode war....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Am einfachsten Du lädts Dir die PBOSL-Librarys, siehe Signatur und
benutzt

Code: Alles auswählen

SetWinBackgroundImage( hWnd, hBitmap )
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

schon mal danke für die antworten, schaue mir mal die sache mit den librarys an.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Code: Alles auswählen

Enumeration ;Fenster
   #Window_Main
EndEnumeration

Enumeration ;Gadgets etc
   #NetworkServer
   #Text_Status_connection
   #Text_In
   #Text_out
   #Button_send
   #Image_Background
   #image0
EndEnumeration

Image0 = CreateImage(#image0,650, 450)

OpenWindow(#Window_Main, 0, 0, 650, 450, "GWC-client", #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered| #PB_Window_SystemMenu)

If CreateGadgetList(WindowID(#Window_Main))
   
   ImageGadget(#Image_Background, 0,0,650,450,Image0)   
   
   If CreateGadgetList(GadgetID(#Image_Background)) 
      EditorGadget(#Text_In,0,0,300,80)
      ButtonGadget(#Button_send, 385, 425, 90, 20, "send")
      EditorGadget(#Text_out, 10, 425, 330, 20)
   EndIf 
   
EndIf   
   
Repeat
	event = WaitWindowEvent()

Until event = #PB_Event_CloseWindow

Edit : boeh , merke gerade das man so gar keine Events mehr bekommt
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

Ich habe mir das ganze mal gerade ein wenig angeschaut und habe da einige Fragen (googel spuckt leider nicht soviel zu purebasic aus... :wink: )

1. Welche der vielen Dateien ist nun die Lib die ich brauche?
2. Wie binde ich sie ein (ich denke mal über OpenLibrary() aber in den Beispielen taucht das nie auf
3. Gibts vllt irgendwo ein Tutorial dazu?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

www.purearea.net hat geschrieben:Hinweise zur Installation von User-Libs:

Die eigentliche Befehlsbibliothek aus dem jeweiligen Archiv muss in das Verzeichnis PureBasic\PureLibraries\UserLibraries\ kopiert werden. Nach dem nächsten Neustart des PureBasic-Editors werden die enthaltenen Befehle erkannt und stehen für die Programmierung zur Verfügung.

Werden im Archiv vordefinierte Konstanten in einer .res Datei mitgeliefert, muss diese in das Verzeichnis PureBasic\Residents\ kopiert werden.

Enthält das Archiv eine Anleitung im .chm Format kann diese Datei in das Verzeichnis PureBasic\Help\ kopiert werden, um die kontext-sensitive Hilfe (per F1) nutzen zu können.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

funktioniert alles einwandfrei, vielen Dank!
Benutzeravatar
michel51
Beiträge: 84
Registriert: 01.11.2005 20:00
Wohnort: Dornhan-Weiden

Beitrag von michel51 »

gnasen hat geschrieben:funktioniert alles einwandfrei, vielen Dank!
Hab mir trotzdem deinen ersten Code mal angeschaut.
Hier die "Korrektur".

Code: Alles auswählen

Enumeration ;Fenster
  #Window_Main
EndEnumeration

Enumeration ;Gadgets etc
  #NetworkServer
  #Text_Status_connection
  #Text_In
  #Text_out
  #Button_send
  #Image_Background
  #image0
EndEnumeration

UseJPEGImageDecoder() ; MUSS Sein, sonst klappt das mit den .JPG-Bild nicht !!!

Image0 = CatchImage(#image0, ?Image0)
DataSection
Image0:
IncludeBinary #PB_Compiler_Home + "Pictures/Bild001.jpg" ; den Pfad wieder anpassen.
; IncludeBinary #PB_Compiler_Home + "Pictures/Background.bmp"
EndDataSection

OpenWindow(#Window_Main, 0, 0, 650, 450, "GWC-client", #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered| #PB_Window_SystemMenu)

If CreateGadgetList(WindowID(#Window_Main))
;   ImageGadget(#Image_Background, 0,0,650,450, Image0) ; Gadgets werden angezeigt, lassen sich aber nicht aktivieren
  EditorGadget(#Text_In,0,0,300,80)
  ButtonGadget(#Button_send, 385, 425, 90, 20, "send")
  EditorGadget(#Text_out, 10, 425, 330, 20)
  ImageGadget(#Image_Background, 0,0,650,450, Image0)       ; Bild überdeckt Gadgets. Diese können jedoch aktiviert werden (wenn 
                                                            ; man sie findet), sie sind dann auch aktivierbar
 DisableGadget(#Text_In, 0)         ; hiermit geht es !!! --- NICHT mit der auskommentierten Version !
 DisableGadget(#Button_Send, 0)     ; Die Gadgets sind AUF dem Bild
 DisableGadget(#Text_Out, 0)        ; und lassen sich aktivieren.
 
EndIf

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Habe die Änderungen und Ergänzungen kommentiert.

Das ist zumindestens eine Lösung, die auch auf dem Mac läuft :D
michel51

Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)

Zum Lernen ist niemand zu alt.
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

hab zwar schon mit "SetWinBackgroundImage( hWnd, hBitmap )" gelöst und funktioniert auch einwandfrei, aber ich bin erstaunt, wie schnell man hier Lösungen bekommt und wieviel mühe man sich hier gibt, deswegen schon mal: :allright:

Dennoch, auch bei dir taucht der Fehler auf, dass die Gadgets verschwinden, wenn man sie ausserhalb des Bildschirms bewegt.

Irgendwie finde ich das mit den gadgets nicht ganz so gut gelöst wie Beispielsweise mit den Steuerelementen in VB (siehe zOrder), aber dies ist bisher auch der einzige negative Punkt, den ich bei PB bisher gefunden habe (ok, bin ja auch noch nicht so lange dabei)
Antworten