versuch es mal damit. Bei mir läuft es mit 3 Fenstern
Code: Alles auswählen
; Beispiel Umgang mit mehreren Fenstern (Kaskadierung)
; PAMKKKKK 21.September.2005
; PB 3.94.
; getestet und angepasst an PB 4.10 Mac by michel51
;- Window Constants
Enumeration
#Window_0
#Window_1
#Window_2
EndEnumeration
;- Gadget Constants
Enumeration
#Text_0_1
#Text_1_1
#Text_2_1
#Button_0_1
#Button_1_1
#Button_1_2
#Button_2_1
EndEnumeration
; Die Fenster verpackt man, in Proceduren
; damit man Sie bei bedarf aufrufen kann
Procedure Open_Window_0() ; Hauptfenster
If OpenWindow(#Window_0, 200, 200, 200, 100, "Fenster 0", #PB_Window_SystemMenu | #PB_Window_TitleBar ) = 0
MessageRequester("Fehler!","Fehler beim Oeffenen von Fenster 0")
ProcedureReturn 0 ; bei Fehler raus aus der Procedure
EndIf
If CreateGadgetList(WindowID(#Window_0)) = 0
MessageRequester("Fehler!", "Gadget Liste Fenster 0 konte nicht erstellt werden!")
ProcedureReturn 0 ; bei Fehler raus aus der Procedure
EndIf
TextGadget(#Text_0_1, 10, 10, 180, 20, "Klicken fuer Fenster 1",#PB_Text_Center )
ButtonGadget(#Button_0_1, 65, 60, 100, 30, "Aufmachen")
ProcedureReturn 1 ; alles OK
EndProcedure
Procedure Open_Window_1()
If OpenWindow(#Window_1, 220, 220, 200, 100, "Fenster 1", #PB_Window_SystemMenu | #PB_Window_TitleBar ) = 0
MessageRequester("Fehler!", "Fehler beim Oeffenen von Fenster 1")
ProcedureReturn 0 ; bei Fehler raus aus der Procedure
EndIf
If CreateGadgetList(WindowID(#Window_1)) = 0
MessageRequester("Fehler!", "Gadget Liste Fenster 1 konte nicht erstellt werden!")
ProcedureReturn 0 ; bei Fehler raus aus der Procedure
EndIf
TextGadget(#Text_1_1, 10, 10, 180, 20, "Willst du noch ein Fenster ?",#PB_Text_Center )
ButtonGadget(#Button_1_1, 15, 60, 80, 30, "Abbruch")
ButtonGadget(#Button_1_2, 115, 60, 80, 30, "Weiter")
ProcedureReturn 1 ; alles OK
EndProcedure
Procedure Open_Window_2()
If OpenWindow(#Window_2, 240, 240, 200, 100, "Fenster 2", #PB_Window_SystemMenu | #PB_Window_TitleBar ) = 0
MessageRequester("Fehler!", "Fehler beim oeffenen von Fenster 2")
ProcedureReturn 0 ; bei Fehler raus aus der Procedure
EndIf
If CreateGadgetList(WindowID(#Window_2)) = 0
MessageRequester("Fehler!", "Gadget Liste Fenster 2 konte nicht erstellt werden!")
ProcedureReturn 0 ; bei Fehler raus aus der Procedure
EndIf
TextGadget(#Text_2_1, 10, 10, 180, 20, "Nun ist aber gut!",#PB_Text_Center )
ButtonGadget(#Button_2_1, 65, 60, 70, 30, "Zurueck")
ProcedureReturn 1 ; alles OK
EndProcedure
; nun folgen die Proceduren die zur Steuerung des Fensterwechsel nötig sind
Procedure Change_to_Window_1() ; Fenster 1 öffnen und wechseln
; Fenster 0 deaktivieren (nicht schliessen)
DisableWindow(#Window_0,1)
;Fenster 0 sendet nun keine ereignisse mehr (ragiert nicht mehr)
Open_Window_1() ; Fenster 1 Öffnen
EndProcedure
Procedure Close_Window_1() ; Fenster 1 schliessen
CloseWindow(#Window_1) ; Fenster 1 schliessen
DisableWindow(#Window_0, 0) ; Fenster 0 wieder Aktivieren (Windows API)
;UseWindow(#Window_0) ; Fenster 0 benutzen
SetActiveWindow(#Window_0) ; Fenster 0 nach vorne holen falls es Hinter anderen Fenstern war
EndProcedure
Procedure Change_to_Window_2() ; Fenster 2 öffnen und wechseln
; Fenster 1 deaktivieren (nicht schliessen)
DisableWindow(#Window_1, 1)
;Fenster 1 sendet nun keine ereignisse mehr (ragiert nicht mehr)
Open_Window_2() ; Fenster 2 Öffnen
EndProcedure
Procedure Close_Window_2() ; Fenster 2 schliessen
CloseWindow(#Window_2) ; Fenster 2 schliessen
DisableWindow(#Window_1, 0) ; Fenster 1 wieder Aktivieren
;UseWindow(#Window_1) ; Fenster 1 benutzen
SetActiveWindow(#Window_1) ; Fenster 1 nach vorne holen falls es Hinter anderen Fenstern war
EndProcedure
;***********************************************
;- Programm start
;***********************************************
Open_Window_0() ; Hauptfenster öffnen
;***********************************************
;- Fenster Behandlung
;***********************************************
Repeat
EventID = WaitWindowEvent() ; Welches Ereignisse trat auf
WinID = EventWindow() ; Welches der Fenster (Nummer) sendet das ereignis?
Select EventID ; Start der Ereignis Behandlung (Fenster und Gadget)
; Fenster Behandlung:
Case #PB_Event_CloseWindow ; Wenn das Ereignis "Fenster schliessen" ist
Select WinID ; Welches hat Fenster schliessen gesendet?
Case #Window_0 ; Es war Fenster 0 (es kann nur geschlossen werden wenn es Aktiv ist)
End ; Wenn Fenster 0 zu schliessen ist dann PROGRAMM ENDE.
Case #Window_1 ; Es war Fenster 1
Close_Window_1() ; Fenster 1 zumachen und zu Fenster 0 wechseln
Case #Window_2 ; Es war Fenster 2
Close_Window_2() ; Fenster 2 zumachen und zu Fenster 1 wechseln
EndSelect ; Ende der Fenster Behandlung
; Gadget Behandlung:
Case #PB_Event_Gadget ; Wenn das Ereignisvon einem Gadget kam
GadgetID = EventGadget() ; Gadgetnummer rausbekommen das gesendet hat
Select GadgetID ; Nach Gadgetnummer reagieren
Case #Button_0_1 ; Es war Knopf 0_1
Change_to_Window_1() ; Fenster 0 deaktiviern und zu Fenster 1 wechseln
Case #Button_1_1 ; Es war Knopf 1_1
Close_Window_1() ; Fenster 1 schliessen zurück zu Fenster 0
Case #Button_1_2 ; Es war Knopf 1_2
Change_to_Window_2() ; Fenster 1 deaktiviern und zu Fenster 2 wechseln
Case #Button_2_1 ; Es war Knopf 2-1
Close_Window_2() ; Fenster 2 schliessen zurück zu Fenster 1
EndSelect ; Ende der Gadget Behandlung
EndSelect ; Ende der Ereignis Behandlung
ForEver ; Endet nur wenn Fenster 0 geschlossen wird.
End