Problème avec la gestion des fenêtres multiples sous Windows

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Hektor
Messages : 1
Inscription : lun. 30/juin/2025 5:53

Problème avec la gestion des fenêtres multiples sous Windows

Message par Hektor »

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 !
Dernière modification par Hektor le mer. 16/juil./2025 13:27, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Problème avec la gestion des fenêtres multiples sous Windows

Message par Ar-S »

Salut,
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
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Re: Problème avec la gestion des fenêtres multiples sous Windows

Message par Jacobus »

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. :)

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.
Répondre