Page 1 sur 1
2 fenêtres pour 1 evenement
Publié : mer. 03/avr./2019 23:11
par Ekim
Bonsoirs à tous,
Je fais face à un problème dont je ne m'y attendais pas
Je ne sais pas si 2 fenêtres et leurs gadgets respectifs peuvent cohabiter dans la même boucle
Code : Tout sélectionner
Openwindow 1 et ses gadgets
Openwindow 2 et ses gadgets
Repeat
Event = WaitWindowEvent()
WindowID = EventWindow()
GadgetID = EventGadget()
EventType = EventType()
....
until.....
Re: 2 fenêtres pour 1 evenement
Publié : jeu. 04/avr./2019 7:06
par Micoute
Bien entendu, mais il faut différencier les gadgets et en particulier les fenêtres, à moins qu'on veuille que tout s'arrête en même temps, s'il s'agît de deux fenêtres voisines, car s'il s'agît de deux fenêtres se chevauchant, la méthode n'est pas la même.
Re: 2 fenêtres pour 1 evenement
Publié : jeu. 04/avr./2019 7:36
par Marc56
Je ne sais pas si 2 fenêtres et leurs gadgets respectifs peuvent cohabiter dans la même boucle
- Il ne doit de toute façon y avoir qu'une seule boucle d’événement par programme.
- Chaque événement retourné par WaitWindowEvent() ou WindowEvent() contient deux informations:
- L’événement
- La fenêtre qui a retourné l’événement
- On peut séparer soit au niveau fenêtre, soit au niveau Gadget()
- Sans séparation, ce sont tous les événements identiques qui sont groupés
Code : Tout sélectionner
; Cas 1 n'importe quelle case de fermeture ferme toutes les fenêtres
EnableExplicit
Enumeration
#Win_0
#Win_1
#Win_2
EndEnumeration
OpenWindow(#Win_0, 100, 100, 100, 100, "")
OpenWindow(#Win_1, 200, 200, 100, 100, "")
OpenWindow(#Win_2, 300, 300, 100, 100, "")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
Code : Tout sélectionner
; Cas 2: Seule la fenête 0 ferme le programme, les autres ferment la fenêtre appelante
EnableExplicit
Enumeration
#Win_0
#Win_1
#Win_2
EndEnumeration
OpenWindow(#Win_0, 100, 100, 100, 100, "")
OpenWindow(#Win_1, 200, 200, 100, 100, "")
OpenWindow(#Win_2, 300, 300, 100, 100, "")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Win_0 : Break
Case #Win_1 : CloseWindow(#Win_1)
Case #Win_2 : CloseWindow(#Win_2)
EndSelect
EndSelect
ForEver
Pour éviter les erreurs, une technique simple est de préfixer tous les gadgets en fonction de leur fenêtre. Ainsi pas de doublon possible. Ex #Win_0_Btn_Quit #Win_0_Btn_Save ...
Re: 2 fenêtres pour 1 evenement
Publié : jeu. 04/avr./2019 10:36
par microdevweb
Bonjour Ekim,
Personnellement je n'utilise plus la boucle pour la gestion des événements mais les bind
Voici une exemple concret
Teste les boutons ainsi que les croix pour fermer les fenêtre
Code : Tout sélectionner
Enumeration ; id window
#FORM_1
#FORM_2
EndEnumeration
Enumeration ; id gadget
#BT_1
#BT_2
EndEnumeration
; GESTION DES EVENT
Procedure evClose()
MessageRequester("Info","vous aller fermer la fenêtre "+GetWindowTitle(EventWindow()))
CloseWindow(EventWindow())
; je teste si les deux fenêtre sont fermée et quitte alors
; le program
If Not IsWindow(#FORM_1) And Not IsWindow(#FORM_2)
End
EndIf
EndProcedure
Procedure evBt_1()
MessageRequester("Info","vous avez cliquer sur le bouton 1")
EndProcedure
Procedure evBt_2()
MessageRequester("Info","vous avez cliquer sur le bouton 2")
EndProcedure
Procedure openForm_1()
OpenWindow(#FORM_1,0,0,400,400,"FORM 1 ",#PB_Window_SystemMenu)
ButtonGadget(#BT_1,150,175,100,50,"BUTTON_1")
; MISE EN PLACE DU CALLBACK POUR LA FENPETRE
BindEvent(#PB_Event_CloseWindow,@evClose(),#FORM_1)
; CALLBACK BUTTON
BindGadgetEvent(#BT_1,@evBt_1())
EndProcedure
Procedure openForm_2()
OpenWindow(#FORM_2,400,0,400,400,"FORM 2 ",#PB_Window_SystemMenu)
ButtonGadget(#BT_2,150,175,100,50,"BUTTON_2")
; MISE EN PLACE DU CALLBACK POUR LA FENPETRE
BindEvent(#PB_Event_CloseWindow,@evClose(),#FORM_2)
; CALLBACK BUTTON
BindGadgetEvent(#BT_2,@evBt_2())
EndProcedure
; ouverture des fenêtres
openForm_1()
openForm_2()
; MAIN LOOP
Repeat : WaitWindowEvent() : ForEver
Re: 2 fenêtres pour 1 evenement
Publié : jeu. 04/avr./2019 23:02
par Ekim
@Micoute @Marc56 donc se qu'il faut retenir c'est une boucle pour toutes les fenêtres mais il faut les différencier par leur variable et l'exemple "EventWindow()" est cool merci
Salut @microdevweb ta façon me fait beaucoup penser au vbscript))) je dis ça car je pratiquais beaucoup)) mais effectivement, la méthode simplifie les choses sur plusieurs façons, merci)
merci à vous les Basiciens