MLD a écrit :Je me souviens que cela avait un peu étonné Dobro
mais j'ai toujours ton exemple !
peut etre m'a t'il etonné ? (je ne me souviens pas de ça )
mais aujourd'hui lorsque je le regarde , je constate que chaque Fenetre gere ses evenements ...

je veux dire, que la gestion des event (le WaitWindowEvent()) n'est pas extrait de la creation de la fenetre ....
tant qu'on ne sort pas de la fenetre on reste dans la procedure .... pour moi c'est clair, et beaucoup mieux que ce dont on parle avec microdevweb
qui lui Extrait la Gestion des events, de la creation de la fenetre ... c'est la dedans qu'il y a quelques chose qui me gene ...
voici selon moi , les 2 "Ecoles" exemples a suivres de gestion multi-fenetre
ton exemple MLD (qui donc reprend une procedure par creation , mais sans extraire la gestion des event par une procedure externe )
en clair un gestion d'event par procedure et par fenetre ... (ça me va

)
Code : Tout sélectionner
;MLD le 28/10/2013
Enumeration
#Ma_fen
#btfen2
#Ma_fen2
#btstop
EndEnumeration
Declare Fen1()
Declare fen2()
Fen1()
End
; ************ zone procedures **********************************
Procedure Fen1()
OpenWindow(#Ma_fen,500,200,400,400,"Ma Fenêtre",#PB_Window_SystemMenu)
SetWindowColor(#Ma_fen,$998660)
; Ici vos gadgets
ButtonGadget(#btfen2, 200, 360, 60, 20,"Fenêtre 2")
; Boucle générale
Repeat
Event = WaitWindowEvent(2)
Select EventGadget()
Case #btfen2
fen2()
EndSelect
Until Event = #PB_Event_CloseWindow
Endprocedure
Procedure fen2()
OpenWindow(#Ma_fen2,550,300,300,100,"Ma Fenêtre",#PB_Window_SystemMenu)
;SetClassLongPtr_(WindowID(#Ma_fen2),#GCL_STYLE,$00020000);*** pour faire une hombre
;HideWindow(#Ma_fen2,0)
;StickyWindow(#Ma_fen2,1)
; Ici vos gadgets
ButtonGadget(#btstop, 200,70, 60, 20,"Stop")
; Boucle générale
Repeat
Event = WaitWindowEvent(2)
If Event = #PB_Event_Gadget
Select EventGadget()
Case #btstop
CloseWindow(#Ma_fen2)
Break
EndSelect
EndIf
ForEver
EndProcedure
; Epb
et l'exemple plus traditionnel (que souvent j'utilise perso , on gère les 2 fenêtres dans le programme principal
toujours pas d'extraction de la gestion des events en dehors ....
Code : Tout sélectionner
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
; Epb
dans les 2 cas, on n'expatrie pas la gestion des events dans une procedure externe a la creation de la fenetre
chaque fenetre a son contexte , et sa gestion d'event ....
je continue a dire que meme si sa marche , vouloir sortir la gestion des events dans une procedure , est une erreur ..
mais chacun code comme il veux ....
je tiens juste a dire, que trouver un bug dans un programme est d'autant plus difficile , que le code est morcelé .....
et je ne parlerai pas des includes

on va pas grossir le topic inutilement, deja qu'on est hors sujet depuis un moment
