il faut que tu comprenne que ton programme s’exécute ligne par ligne et que
lorsque tu es dans une boucle le programme retourne au début de la boucle quand il arrive a la fin .
voila un pseudo code grossierement basé sur ton programe
Code : Tout sélectionner
---
boucle principale
clic menu 1 ---> menu 1
clic menu 2 ---> menu 2
fin boucle principale
---
menu 1
ouvre fenetre 1
boucle menu 1
fin boucle menu 1
---
menu 2
ouvre fenetre 2
boucle menu 2
fin boucle menu 2
quand tu es dans le programme principal dans ta boucle principale tu indique au programme que si tu vas dans menu1 tu saute a menu 1
et si tu clic dans menu2 tu saute dans menu2
mais si tu clic dans menu1 quand tu es dans menu 1 tu vas rester dans la boucle 1 tout le temps tu ne retourne jamais dans la boucle principale
donc quand tu clic sur menu 2 tu es toujours dans la boule menu 1 ou rien ne dit a ton programme d'ouvrir menu 2
en procédant comme tu le fait il faudrait que tu aie dans chacune des boucles la gestion de tout le menu/gadgets de toute tes fenêtres ouvertes pour pouvoir gérer leur fonctionnement. tu imagine certainement que cela alourdirait énormément ton code, tout le code des fenêtres dans toute les procédures des fenêtres.
voici une manière de procéder , il y en a plusieurs mais je suis reste au plus prêt de ce que tu avais pensé faire a savoir une procédure par fenêtres.
Code : Tout sélectionner
Enumeration
#WinMenu
#WinMenu1
#WinMenu2
#okbutton1 ; bouton OK dans la fgentre 1
#dohbutton1; bonton doh dans la fenetre 1
#okbutton2 ; bouton OK dans la fgentre 2
#dohbutton2; bonton doh dans la fenetre 2
EndEnumeration
Global ExitMenu
Procedure createwin1() ; crée la fenetre menu 1 avec tout ses gadgets
OpenWindow(#WinMenu1, 0,0,400,400, "Menu 1", #PB_Window_SystemMenu |#PB_Window_ScreenCentered | #PB_Window_TitleBar |#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget)
SetWindowColor(#WinMenu1,RGB(135, 206, 250))
ButtonGadget(#okbutton1,0,0,120,20,"ok")
ButtonGadget(#dohbutton1,0,20,120,20,"Doh")
EndProcedure
Procedure createwin2(); crée la fenetre menu 1 avec tout ses gadgets
OpenWindow(#WinMenu2, 0,0,250,100, "Menu 2", #PB_Window_SystemMenu |#PB_Window_ScreenCentered | #PB_Window_TitleBar |#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget)
SetWindowColor(#WinMenu2,RGB(255, 0, 255))
ButtonGadget(#okbutton2,0,20,120,20,"ok")
ButtonGadget(#dohbutton2,0,0,120,20,"Doh")
EndProcedure
Procedure Event_main(EventId)
; ici la gestion de la fenetre principale
;sans boucle
If EventID = #PB_Event_CloseWindow
CloseWindow(#WinMenu)
exitMenu=1
EndIf
If eventid=#PB_Event_MoveWindow
Debug "la fenetre principale a bougé"
EndIf
If EventId=#PB_Event_Menu ; gestion des entrées du menu
Select EventMenu()
Case 1
If menu1=0 ;si on choisis menu1
If IsWindow(#WinMenu1)=0 ; et que la fenetre n'est pas ouverte
createwin1()
Else ;si elle est ouverte on la passe en normal au cas ou elle est minimisée
SetWindowState(#WinMenu1,#PB_Window_Normal )
EndIf
EndIf
Case 2
If menu1=0
If IsWindow(#WinMenu2)=0 ; si on choisis menu2 et que la fenetre n'est pas ouverte
createwin2()
Else ;si elle est ouverte on la passe en normal au cas ou elle est minimisée
SetWindowState(#WinMenu2,#PB_Window_Normal )
EndIf
EndIf
Case 3
exitmenu=1
EndSelect
EndIf
EndProcedure
;--------------------------------------------------------------------------------------------------------
Procedure Run_Menu1(EventId)
; ici la gestion de la fenetre menu1
; sans boucle
If eventid=#PB_Event_MoveWindow
Debug "la fenetre 1 a bougé"
EndIf
If EventID = #PB_Event_CloseWindow
CloseWindow(#WinMenu1) ; on ferme la fenetre
EndIf
If EventId=#PB_Event_Gadget
If EventGadget()=#okbutton1
Debug "OK #1"
EndIf
If EventGadget()=#dohbutton1
Debug "Doh!!! #1"
EndIf
EndIf
EndProcedure
;--------------------------------------------------------------------------------------------------------
Procedure Run_Menu2(eventid)
; ici la gestion de la fenetre menu2
; sans boucle
If eventid=#PB_Event_MoveWindow
Debug "la fenetre 2 a bougé"
EndIf
If EventID = #PB_Event_CloseWindow
CloseWindow(#WinMenu2) ; on ferme la fenetre
EndIf
If EventId=#PB_Event_Gadget
If EventGadget()=#okbutton2
Debug "OK #2"
EndIf
If EventGadget()=#dohbutton2
Debug "Doh!!! #2"
EndIf
EndIf
EndProcedure
;---------------------------------------------------------------------------------------------------------------------------------------
exitMenu=0
ExamineDesktops()
OpenWindow(#WinMenu, 0,0, 800, 500, "Test fenêtres",#PB_Window_SystemMenu |#PB_Window_ScreenCentered | #PB_Window_TitleBar |#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget)
SetWindowColor(#WinMenu,RGB(255, 165, 0))
If CreateMenu(0, WindowID(#WinMenu))
MenuTitle("Menu")
MenuItem( 01, "Menu 1")
MenuItem( 02, "Menu 2")
MenuItem( 03, "Quitter")
EndIf
exitMenu=0
Repeat
EventId=WaitWindowEvent()
If EventId
If EventWindow()= #WinMenu1
Run_Menu1(EventId)
EndIf
If EventWindow()= #WinMenu2
Run_Menu2(EventId)
EndIf
If EventWindow()=#winmenu
Event_main(eventid)
EndIf
EndIf
Until exitMenu=1
End