Verfasst: 10.02.2008 01:00
Ja gibt es lies Kiffis Posting
.

die Übersicht im eigenen Code zu behalten ist nicht verkehrt. WennMagix-Soft <Kain> hat geschrieben:das mache ich eigentlich wegen der übersicht...
für diesen Zweck benennt man die Konstanten so, dass man auch nochMagix-Soft <Kain> hat geschrieben:weil das bringt mir ja nichts wenn ich über 100 konstanden habe und ich nicht mehr weis welche für was ist -.-
Code: Alles auswählen
#frmOptions_cmdOK ; OK-Button im Optionen-Fenster
#frmOptions_cmdCancel ; Abbrechen-Button im Optionen-Fenster
Code: Alles auswählen
;Alle Konstanten
#Window1 = 0
#Window2 = 1
#Window3 = 2
#Window1_Btn_Close = 0
#Window1_Btn_Window2 = 1
#Window1_Btn_Window3 = 2
#Window2_Btn_Close = 3
#Window3_Btn_Close = 4
;Hauptfenster erstellen
OpenWindow(#Window1, 0, 0, 150, 100, "Window 1", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(#Window1))
ButtonGadget(#Window1_Btn_Close, 10, 10, 100, 20, "Close")
ButtonGadget(#Window1_Btn_Window2, 10, 35, 100, 20, "Open Window 2")
ButtonGadget(#Window1_Btn_Window3, 10, 60, 100, 20, "Open Window 3")
;Events des 1. Fensters
Procedure Window1Events(Event)
Select Event
Case #PB_Event_CloseWindow
ProcedureReturn -1 ;Damit realisiere ich das Verlassen der Eventschleife
Case #PB_Event_Gadget
Select EventGadget()
Case #Window1_Btn_Close
ProcedureReturn -1
Case #Window1_Btn_Window2
OpenWindow(#Window2, 0, 0, 150, 35, "Window 2", #PB_Window_SystemMenu|#PB_Window_WindowCentered, Window1)
CreateGadgetList(WindowID(#Window2))
ButtonGadget(#Window2_Btn_Close, 10, 10, 100, 20, "Close")
Case #Window1_Btn_Window3
OpenWindow(#Window3, 0, 0, 150, 35, "Window 3", #PB_Window_SystemMenu|#PB_Window_WindowCentered, Window1)
CreateGadgetList(WindowID(#Window3))
ButtonGadget(#Window3_Btn_Close, 10, 10, 100, 20, "Close")
EndSelect
EndSelect
EndProcedure
;Events des 2. Fensters
Procedure Window2Events(Event)
Select Event
Case #PB_Event_CloseWindow
CloseWindow(#Window2)
Case #PB_Event_Gadget
Select EventGadget()
Case #Window2_Btn_Close
CloseWindow(#Window2)
EndSelect
EndSelect
EndProcedure
;Events des 3. Fensters
Procedure Window3Events(Event)
Select Event
Case #PB_Event_CloseWindow
CloseWindow(#Window3)
Case #PB_Event_Gadget
Select EventGadget()
Case #Window3_Btn_Close
CloseWindow(#Window3)
EndSelect
EndSelect
EndProcedure
;Eine Schleife für alle Fenster!
Repeat
Event = WaitWindowEvent()
Select EventWindow()
Case #Window1
If Window1Events(Event) = -1 : Break : EndIf
Case #Window2
Window2Events(Event)
Case #Window3
Window3Events(Event)
EndSelect
ForEver
End
Das gute an der Einschleifenlösung ist ja gerade, dass alle Funktionen in den Fenstern weiterhin funktionieren. Wenn du das nicht willst, musst du eben beim Öffnen eines übergeordneten Fensters die untergeordneten deaktivieren mittels DisableWindow().Magix-Soft <Kain> hat geschrieben:und zwar wenn jetzt ein übergeortnetes fenster auf ist ist es un raatsam ein vorheriges fenster bedienen zu können... da es sonst zu problemen kommen kann...
Bist du dir da sicher?Magix-Soft <Kain> hat geschrieben: okay also bei macros keine String$ sondern nur Variabeln.s.... das ist soweit verstanden![]()
Code: Alles auswählen
Macro MeinDebug(Platzhalter)
Debug Platzhalter
EndMacro
MeinDebug("Laber")
MeinDebug(123)
MeinDebug(3.1415)
Code: Alles auswählen
Macro Frage(Platzhalter)
If (Platzhalter)
EndMacro
Macro Antwort(Platzhalter1, Platzhalter2)
Debug Platzhalter1
Else
Debug Platzhalter2
EndIf
EndMacro
Frage(1 = 1)
Antwort("Richtig", "Falsch")
Frage(1 = 2)
Antwort("Richtig", "Falsch")