Page 1 sur 1

Fermeture fenêtre secondaire

Publié : lun. 14/juil./2025 7:52
par pasbel
Bonjour à tous

Je suis en train de faire un petit programme fenêtré.
J'ouvre bien ma fenêtre avec menu, quelques gadgets, tout est OK.
J'ouvre une nouvelle fenêtre, (fenêtre de configuration du logiciel), sans menu, avec pour le moment un seul gadget, un simple bouton pour valider les options et fermer cette fenêtre. Tout ça fonctionne sans soucis.

Mais... je ne vois pas comment supprimer le bouton de fermeture de la fenêtre (en haut à droite de la fenêtre), soit rediriger sa commande pour ne fermer que cette fenêtre, car actuellement, il ferme directement le programme comme le fait celui de la fenêtre principale.

J'ai essayé d'utiliser "EventGadget(fenetre1)" pour ma sortie de la fenêtre principale en espérant que ça ne sortirait pas avec la fenêtre 2, mais ça ne fonctionne pas... syntac error ;-)
Fait des tests aussi avec des "WaitWindowEvent(fenêtre1) et WaitWindowEvent(fenêtre2) pour différencier les 2 fenêtres, mais ça ne semble pas non plus fonctionner... pas d'erreur de compilation, mais ça ne semble rien faire.

Des idées ?

Re: Fermeture fenêtre secondaire

Publié : lun. 14/juil./2025 10:33
par falsam
pasbel a écrit : lun. 14/juil./2025 7:52Des idées ?
Oui ! Tester la fenêtre en cours de fermeture.

Code : Tout sélectionner

EnableExplicit

Enumeration window
  #window0
  #window1
EndEnumeration

Enumeration gadgets
  #btnClose
EndEnumeration

Global Event

; ouverture de la fenetre principale
OpenWindow(#window0, 0, 0, 800, 600, "Fenetre principale", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
ButtonGadget(#btnClose, 750, 550, 50, 30, "Close")

; ouverture de la fenetre fille (Le parent n'est pas obligatoire)
OpenWindow(#window1, 0, 0, 400, 300, "Fenetre fille", #PB_Window_ScreenCentered | #PB_Window_SystemMenu, WindowID(#window0))


; Boucle evenementielle (Tester les evenements)
Repeat
  Event = WaitWindowEvent()
  
  Select Event
      
    Case #PB_Event_Gadget ;Evenements gadgets
      Select EventGadget()
        Case #btnClose 
          CloseWindow(#window0)
          End  
      EndSelect
      
    Case #PB_Event_CloseWindow ;Evenement fenetres
      Select EventWindow()
        Case #window0
          CloseWindow(#window0)
          End
          
        Case #window1
          CloseWindow(#window1)
          
      EndSelect
      
  EndSelect
ForEver


Re: Fermeture fenêtre secondaire

Publié : lun. 14/juil./2025 10:44
par falsam
Petite erreur de flag window dans mon code précédent. C'est corrigé.

Re: Fermeture fenêtre secondaire

Publié : lun. 14/juil./2025 10:54
par pasbel
Cool, merci

Je n'avais pas trouvé l'info sur #PB_Event_CloseWindow()

Je vais essayer l'option WindowID() aussi car j'ai un peu bidouillé... mais ça marche.
Quand j'ouvre ma fenêtre fille, je dois désactiver manuellement la fenêtre mère car je ne veux pas qu'on y accède tant que la fille est ouverte, et quand je ferme cette dernière, je dois réactiver la fenêtre mère et ensuite la faire passé au premier plan car elle a tendance à passer à l'arrière à sa réactivation. Peut être que ça règle ça, je testerai en même temps.

Encore merci

Le liens de la version actuelle du logiciel, un petit utilitaires pour Reaper, logiciel de musique :
http://www.dr-midik.fr/site/dr-midik_re ... xport.html

Re: Fermeture fenêtre secondaire

Publié : lun. 14/juil./2025 11:13
par falsam
pasbel a écrit : lun. 14/juil./2025 10:54 Quand j'ouvre ma fenêtre fille, je dois désactiver manuellement la fenêtre mère car je ne veux pas qu'on y accède tant que la fille est ouverte, et quand je ferme cette dernière, je dois réactiver la fenêtre mère et ensuite la faire passé au premier plan car elle a tendance à passer à l'arrière à sa réactivation. Peut être que ça règle ça, je testerai en même temps.
Modification de mon code précédent. De cette manière, il n'est pas possible d'interagir avec la fenêtre principale, sans fermer la fenêtre fille.

Code : Tout sélectionner

EnableExplicit

Enumeration window
  #window0
  #window1
EndEnumeration

Enumeration gadgets
  #callWindow1
  #window0Close
  #window1Close
EndEnumeration

Global Event

; ouverture de la fenetre principale
OpenWindow(#window0, 0, 0, 800, 600, "Fenetre principale", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)

ButtonGadget(#callWindow1, 700, 510, 80, 30, "Ouvre fille")
ButtonGadget(#window0Close, 700, 550, 80, 30, "Ferme moi")


; Boucle evenementielle (Tester les evenements)
Repeat
  Event = WaitWindowEvent()
  
  Select Event
      
    Case #PB_Event_Gadget ;Evenements gadgets
      Select EventGadget()
        Case #callWindow1
          DisableWindow(#window0, #True)
          OpenWindow(#window1, 0, 0, 400, 300, "Fenetre fille", #PB_Window_ScreenCentered | #PB_Window_SystemMenu, WindowID(#window0))
                    
        Case #window0Close 
          CloseWindow(#window0)
          End  
      EndSelect
      
      
    Case #PB_Event_CloseWindow ;Evenement fenetres
      Select EventWindow()
        Case #window0
          CloseWindow(#window0)
          End
          
        Case #window1
          CloseWindow(#window1)
          DisableWindow(#window0, #False)
      EndSelect
      
  EndSelect
ForEver


Re: Fermeture fenêtre secondaire

Publié : lun. 14/juil./2025 12:13
par pasbel
Merci ;-)