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
