Salut à tous,
Je bosse sur une appli qui doit gérer plusieurs fenetres indépendantes mais je galère avec le focus et la gestion des événements quand j’ouvre plusieurs fenetre. En gros, des que j’ai deux fenetres ouvertes les messages clavier et souris n’arrivent plus toujours à la bonne fenêtre. J’utilise OpenWindow pour créer les fenetres et un loop classique Repeat...Until Event = #PB_Event_CloseWindow. J’ai essayé de vérifier les EventWindow() en suivant des conseils sur libre-octet pour router les events mais ca bug souvent surtout avec les raccourcis clavier. Une idée pour tracker correctement la fenetre active sans partir sur un truc trop lourd serait d’une grande aide.
Merci d’avance !
Problème avec la gestion des fenêtres multiples sous Windows
Problème avec la gestion des fenêtres multiples sous Windows
Dernière modification par Hektor le mer. 16/juil./2025 13:27, modifié 1 fois.
Re: Problème avec la gestion des fenêtres multiples sous Windows
Salut,
Poste un code sommaire de ton soucis.
Poste un code sommaire de ton soucis.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Problème avec la gestion des fenêtres multiples sous Windows
Bonjour,
voici un petit exemple tout simple de gestion de plusieurs fenêtres. Il y a d'autres méthodes, mais celle-ci est facile à comprendre. L'avantage est que tu n'as qu'une seule boucle d'évènements à gérer. Tu peux ensuite ajouter les actions/évènements que tu veux.
voici un petit exemple tout simple de gestion de plusieurs fenêtres. Il y a d'autres méthodes, mais celle-ci est facile à comprendre. L'avantage est que tu n'as qu'une seule boucle d'évènements à gérer. Tu peux ensuite ajouter les actions/évènements que tu veux.

Code : Tout sélectionner
;-Constantes
Enumeration Fenetres
#WINMAIN
#WIN_1
#WIN_2
EndEnumeration
Enumeration Gadgets
;-Gadgets #WINMAIN
#BTN_WIN1
#BTN_WIN2
#BTN_1
#BTN_2
#BTN_Close_WINMAIN
#EDITOR_WINMAIN
;-Gadgets #WIN_1
#BTN_3
#BTN_4
#BTN_Close_WIN_1
#EDITOR_WIN_1
;-Gadgets #WIN_2
#BTN_5
#BTN_6
#BTN_Close_WIN_2
#EDITOR_WIN_2
EndEnumeration
Procedure Window_N1()
If OpenWindow(#WIN_1, 0, 0, 500, 300, "Fenêtre #WIN_1", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_TitleBar) <> 0
ButtonGadget(#BTN_3, 10, 20, 100,30, "Transférer") : GadgetToolTip(#BTN_3, "Transférer texte dans éditeur principal")
ButtonGadget(#BTN_4, 10, 60, 100,30, "Effacer tout") : GadgetToolTip(#BTN_4, "Effacer le contenu de l'éditeur")
ButtonGadget(#BTN_Close_WIN_1, 10, 100, 100,30, "Fermer") : GadgetToolTip(#BTN_Close_WIN_1, "Fermer cette fenêtre")
EditorGadget(#EDITOR_WIN_1, 120, 20, 360, 260, #PB_Editor_WordWrap)
EndIf
EndProcedure
Procedure Window_N2()
If OpenWindow(#WIN_2, 0, 0, 500, 300, "Fenêtre #WIN_2", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_TitleBar) <> 0
ButtonGadget(#BTN_5, 10, 20, 100,30, "Transférer") : GadgetToolTip(#BTN_5, "Transférer texte dans éditeur principal")
ButtonGadget(#BTN_6, 10, 60, 100,30, "Effacer tout") : GadgetToolTip(#BTN_6, "Effacer le contenu de l'éditeur")
ButtonGadget(#BTN_Close_WIN_2, 10, 100, 100,30, "Fermer") : GadgetToolTip(#BTN_Close_WIN_2, "Fermer cette fenêtre")
EditorGadget(#EDITOR_WIN_2, 120, 20, 360, 260, #PB_Editor_WordWrap)
EndIf
EndProcedure
If OpenWindow(#WINMAIN, 0, 0, 500, 300, "Fenêtre principale", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_TitleBar) <> 0
ButtonGadget(#BTN_WIN1, 10, 20, 100,30, "Open WIN_1") : GadgetToolTip(#BTN_WIN1, "Ouvrir fenêtre #WIN_1")
ButtonGadget(#BTN_WIN2, 10, 60, 100,30, "Open WIN_2") : GadgetToolTip(#BTN_WIN2, "Ouvrir fenêtre #WIN_2")
ButtonGadget(#BTN_1, 10, 100, 100,30, "Mon texte à moi") : GadgetToolTip(#BTN_1, "Ajouter un texte pré-établi")
ButtonGadget(#BTN_2, 10, 140, 100,30, "Effacer tout") : GadgetToolTip(#BTN_2, "Effacer le contenu de l'éditeur")
ButtonGadget(#BTN_Close_WINMAIN, 10, 180, 100,30, "Quitter") : GadgetToolTip(#BTN_Close_WINMAIN, "Quitter ce programme")
EditorGadget(#EDITOR_WINMAIN, 120, 20, 360, 260, #PB_Editor_ReadOnly|#PB_Editor_WordWrap)
;-===========================
;-PROGRAMME
;-===========================
Repeat
Event = WaitWindowEvent()
;-Event Gadgets
If Event = #PB_Event_Gadget
Select EventGadget()
;-Gadgets #WINMAIN
Case #BTN_WIN1 : Window_N1()
Case #BTN_WIN2 : Window_N2()
Case #BTN_1 : AddGadgetItem(#EDITOR_WINMAIN, -1, "Je suis une phrase toute prête du style : Veuillez agréer, M. Patate, toute mon admiration pour les frites que j'ai pu manger grâce à vous ;)")
Case #BTN_2 : ClearGadgetItems(#EDITOR_WINMAIN)
Case #BTN_Close_WINMAIN : Quit = 1
;-Gadgets #WIN_1
Case #BTN_3 : AddGadgetItem(#EDITOR_WINMAIN, -1, GetGadgetText(#EDITOR_WIN_1)) : CloseWindow(#WIN_1)
Case #BTN_4 : ClearGadgetItems(#EDITOR_WIN_1)
Case #BTN_Close_WIN_1 : CloseWindow(#WIN_1)
;-Gadgets #WIN_2
Case #BTN_5 : AddGadgetItem(#EDITOR_WINMAIN, -1, GetGadgetText(#EDITOR_WIN_2)) : CloseWindow(#WIN_2)
Case #BTN_6 : ClearGadgetItems(#EDITOR_WIN_2)
Case #BTN_Close_WIN_2 : CloseWindow(#WIN_2)
EndSelect
EndIf
;-Fin
If Event = #PB_Event_CloseWindow
Select EventWindow()
Case #WINMAIN : Quit = 1
Case #WIN_1 : CloseWindow(#WIN_1)
Case #WIN_2 : CloseWindow(#WIN_2)
EndSelect
EndIf
Until Quit = 1
End
EndIf
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.