micam a écrit:
Je pose la question aux spécialistes : ce code est correct ?
Les réponses sont les bienvenues pour me faire évoluer.
je ne suis pas un spécialiste , mais pour moi ce code n'est pas correcte !
meme s'il fonctionne a peut pres ...
pourquoi ? :
on ne devrai jamais mettre une boucle d'event dans une procedure !
ta procedure "OpenWindow_Fenetre2()"
est a bannir !
de plus tant que tu es dans cette procedure , tu ne récupère pas les event de la fenetre 1
ton code c'est ou l'une ou l'autre ....
parce que tu es enfermé dans une procedure
de plus niveau Pile()
tu risque de saturer la pile , avec les event qui arrive dedans
( tout ce qui est dans une procedure est empilé )
enfin pas vraiment , mais si tu as un plantage dans la procedure , là tu aura un probleme de pile
et bonjour le cirque
enfin , tout un tas de mauvaise excuse , simplement parceque j'aime pas l'idée

ce code est preferable :
Code:
Enumeration 0 ; Id. Fenêtres
#FENETRE1
#FENETRE2
EndEnumeration
Enumeration 0 ; Id. Gadgets
#FEN1_BOUTON
#FEN1_FERMER
#FEN2_FERMER
EndEnumeration
If OpenWindow(#FENETRE1, 0, 0, 640, 480, "Fenêtre 1", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#FENETRE1))
ButtonGadget(#FEN1_BOUTON, 5, 5, 100, 22, "Ouvrir Fenêtre 2")
ButtonGadget(#FEN1_FERMER, 5, 45, 100, 22, "Quitter")
EndIf
Repeat
Evenement.l = WaitWindowEvent()
Select EventWindow()
;=====================================================
;== EVENEMENTS DE LA FENETRE PRINCIPALE
;=====================================================
Case #FENETRE1
Select Evenement
Case #PB_Event_Gadget
Select EventGadget()
Case #FEN1_BOUTON
If OpenWindow(#FENETRE2, 0, 0, 320, 240, "Fenêtre 2", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#FENETRE2))
ButtonGadget(#FEN2_FERMER, 5, 5, 100, 22, "Fermer")
EndIf
EndIf
Case #FEN1_FERMER
Break
EndSelect
Case #PB_Event_CloseWindow
Break
EndSelect
;=====================================================
;== EVENEMENTS DE LA FENETRE SECONDAIRE
;=====================================================
Case #FENETRE2
Select Evenement
Case #PB_Event_Gadget
If EventGadget() = #FEN2_FERMER
CloseWindow(#FENETRE2)
EndIf
Case #PB_Event_CloseWindow
CloseWindow(#FENETRE2)
EndSelect
EndSelect
ForEver
EndIf
tu peux t'amuser a faire dessiner une fenetre par une procedure
mais n'inclue pas la boucle d'evenement dedans ! .. mais fais comme tu veux apres tout , je m'en tape ...
je me demande d'ailleurs pourquoi je reponds ,en fait ...
au lieu de me faire un petit café au lait ,accompagné de biscuit a la noix .. de coco
le shemas c'est :
Creation fenetre 1
; boucle principale
; *** Boucle d'event des 2 fenetres ***
si bouton lance fenetre 2
creation fenetre 2
; *****************************
; fin boucle principale
... mais bon je ne suis pas spécialiste
