[code] Eventloop für mehrere Fenster
Verfasst: 04.06.2009 14:34
Ich hab meinen etwas älteren Code mal überarbeitet...
Man kann mehrere Fenster von einem Eventloop aus steuern, ohne MDI oder Child/Parent zu verwenden.
Wichtig ist dabei vor allem, dass man für alle Gadgets eindeutige Nummern verwendet.
Und natürlich sollte man den Code gut strukturieren, um etwas wiederfinden zu können.
Man kann mehrere Fenster von einem Eventloop aus steuern, ohne MDI oder Child/Parent zu verwenden.
Wichtig ist dabei vor allem, dass man für alle Gadgets eindeutige Nummern verwendet.
Und natürlich sollte man den Code gut strukturieren, um etwas wiederfinden zu können.
Code: Alles auswählen
;*********************************************************
;*** MoreWindows.pb
;***
;*** Example for use of EventWindow()
;*** to handle multiple Windows
;*** without child/parent
;***
;*** Review 2009-06-04 Kaeru Gaman
;***
;*** PB Ver 4.30 Win
;*********************************************************
EnableExplicit
;*************************************
Enumeration ;Windows
#Win_Main
#Win_Sub1
#Win_Sub2
#Win_Sub3
#Win_Sub4
EndEnumeration
;*************************************
Enumeration ;Gadgets
#Main_But_LaunchSub1
#Main_But_LaunchSub2
#Main_But_LaunchSub3
#Main_Txt_Display
#Sub1_But_TestBeep
#Sub2_But_TestBeep
#Sub3_But_LaunchSub4
#Sub4_Opt_Text1
#Sub4_Opt_Text2
#Sub4_Opt_Text3
EndEnumeration
;*************************************
Procedure OpenSub1()
OpenWindow(#Win_Sub1, -1, -1, 200,150,"Sub1",#PB_Window_ScreenCentered | #PB_Window_SystemMenu )
ButtonGadget(#Sub1_But_TestBeep,10,10,60,20,"Beep Deep")
EndProcedure
;*************************************
Procedure OpenSub2()
OpenWindow(#Win_Sub2, -1, -1, 200,150,"Sub2",#PB_Window_ScreenCentered | #PB_Window_SystemMenu )
ButtonGadget(#Sub2_But_TestBeep,10,10,60,20,"Beep High")
EndProcedure
;*************************************
Procedure OpenSub3()
OpenWindow(#Win_Sub3, -1, -1, 200,150,"Sub3",#PB_Window_ScreenCentered | #PB_Window_SystemMenu )
ButtonGadget(#Sub3_But_LaunchSub4, 70,110,120,30,"Launch Sub4")
EndProcedure
;*************************************
Procedure OpenSub4()
OpenWindow(#Win_Sub4, -1, -1, 200,150,"Sub4",#PB_Window_ScreenCentered | #PB_Window_SystemMenu )
OptionGadget(#Sub4_Opt_Text1,20,20,160,20,"Beef")
OptionGadget(#Sub4_Opt_Text2,20,50,160,20,"Lamb")
OptionGadget(#Sub4_Opt_Text3,20,80,160,20,"Fish")
EndProcedure
;*************************************
OpenWindow(#Win_Main,0,0,320,240,"Main", #PB_Window_ScreenCentered | #PB_Window_SystemMenu )
ButtonGadget(#Main_But_LaunchSub1,190,120,120,30,"Launch Sub1")
ButtonGadget(#Main_But_LaunchSub2,190,160,120,30,"Launch Sub2")
ButtonGadget(#Main_But_LaunchSub3,190,200,120,30,"Launch Sub3")
TextGadget(#Main_Txt_Display,10,10,160,20, "No Choice yet", #PB_Text_Border)
;*************************************
Define Event.i, EvWin.i, EvGad.i
Define EXIT.l
Define DisplayTxt$ = "Your Choice is "
;*************************************
Repeat
Event = WaitWindowEvent()
EvWin = EventWindow()
EvGad = EventGadget()
Select EvWin
;*********************************************************
;*** Main Window
;*********************************************************
Case #Win_Main
Select Event
Case #PB_Event_Gadget
;*************************************
;** Gadget Events
Select EvGad
Case #Main_But_LaunchSub1
OpenSub1()
Case #Main_But_LaunchSub2
OpenSub2()
Case #Main_But_LaunchSub3
OpenSub3()
EndSelect
;*************************************
;** Other Events
Case #PB_Event_CloseWindow
EXIT = 1
EndSelect
;*********************************************************
;*** Sub Window 1
;*********************************************************
Case #Win_Sub1
Select Event
Case #PB_Event_Gadget
;*************************************
;** Gadget Events
Select EvGad
Case #Sub1_But_TestBeep
; Beep_( 500,300)
MessageBeep_( #MB_ICONERROR )
EndSelect
;*************************************
;** Other Events
Case #PB_Event_CloseWindow
CloseWindow(#Win_Sub1)
EndSelect
;*********************************************************
;*** Sub Window 2
;*********************************************************
Case #Win_Sub2
Select Event
Case #PB_Event_Gadget
;*************************************
;** Gadget Events
Select EvGad
Case #Sub2_But_TestBeep
; Beep_(1500,300)
MessageBeep_( #MB_ICONEXCLAMATION )
EndSelect
;*************************************
;** Other Events
Case #PB_Event_CloseWindow
CloseWindow(#Win_Sub2)
EndSelect
;*********************************************************
;*** Sub Window 3
;*********************************************************
Case #Win_Sub3
Select Event
Case #PB_Event_Gadget
;*************************************
;** Gadget Events
Select EvGad
Case #Sub3_But_LaunchSub4
OpenSub4()
EndSelect
;*************************************
;** Other Events
Case #PB_Event_CloseWindow
CloseWindow(#Win_Sub3)
EndSelect
;*********************************************************
;*** Sub Window 4
;*********************************************************
Case #Win_Sub4
Select Event
Case #PB_Event_Gadget
;*************************************
;** Gadget Events
Select EvGad
Case #Sub4_Opt_Text1
SetGadgetText(#Main_Txt_Display, DisplayTxt$ + "Beef")
Case #Sub4_Opt_Text2
SetGadgetText(#Main_Txt_Display, DisplayTxt$ + "Lamb")
Case #Sub4_Opt_Text3
SetGadgetText(#Main_Txt_Display, DisplayTxt$ + "Fish")
EndSelect
;*************************************
;** Other Events
Case #PB_Event_CloseWindow
CloseWindow(#Win_Sub4)
EndSelect
;*********************************************************
;*** End of Window List
;*********************************************************
EndSelect
Until EXIT = 1
End