Page 1 sur 1

Gestion d'une Nouvelle fenêtre

Publié : dim. 14/août/2016 14:14
par Jeanmarc
Bonjour A Tous, Programmeurs du Dimanche,

Je veux Créer et Afficher une fenêtre secondaire à l'aide d'un Bouton.

j'y arrive avec OpenWidow.
Je la ferme avec CloseWindow activé avec un Bouton dans la fenêtre Secondaire.

Mais ensuite je ne peux l'ouvrir à nouveau.

Puis-je placer les Id Gadget de cette nouvelle fenêtre au même endroit que ceux de la fenêtre principale, dans les mêmes Enumérations ?

Puis-je utiliser la même zone EventWindows ou en créer une dans la Procédure NouvelleFenetre?

Merci,

JM

Re: Gestion d'une Nouvelle fenêtre

Publié : dim. 14/août/2016 14:42
par Zorro
Salut,
une regle de base a connaitre,
si tu veux qu'on t'aide, faut poster ton code

comme ça , sans rien voir, personne ne pourra repondre ! ;)

comment veut tu qu'on devine si tu a fait une erreur quelque part ?

en pb tu peut tout faire ...

deux fenetre independantes avec chacune leur boucle d'event
deux fenetre liées (mais separées) , avec une seule boucle d'event

meme une fenetre mere, et sa fenetre fille (inclue dans la premiere )

bref, le choix est vaste

Re: Gestion d'une Nouvelle fenêtre

Publié : dim. 14/août/2016 17:50
par Marc56
Si je ne me trompe ? quand on utilise CloseWindow() on libère toutes les ressources associées, donc pour rouvrir la même fenêtre, tu relances simplement toute la procédure qui a lancée la fenêtre secondaire.

Comme a dit Zorro, un bout de code est nécessaire, tu fais peut-être une simple erreur de conception.

:wink:

Re: Gestion d'une Nouvelle fenêtre

Publié : dim. 14/août/2016 19:48
par Ar-S
Si a un moment donnée tu as tes 2 fenêtres d'ouvertes, tu ne peux pas utiliser les mêmes énumérations, ça parait logique.
Par contre, pour gérer tes coordonnées, tu peux trés bien utiliser les mêmes données.
Autant utiliser une structure pour cela.

Code : Tout sélectionner

Enumeration Fenetres
  #Fenetre1
  #Fenetre2
EndEnumeration

Enumeration Gadgets
  #CanvasFenetre1
  #CanvasFenetre2
EndEnumeration

Structure Coo
  X.i
  Y.i
  L.i
  H.i
EndStructure

Gad.Coo\X = 10
Gad.Coo\Y = 10
Gad.Coo\L = 280
Gad.Coo\H = 580


Procedure OuvrirFenetre1()
  OpenWindow(#Fenetre1, 300, 10, 300, 600, "Fenetre 1", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
  CanvasGadget(#CanvasFenetre1,Gad.Coo\X, Gad.Coo\Y, Gad.Coo\L, Gad.Coo\H)
  ProcedureReturn 1
EndProcedure

Procedure OuvrirFenetre2()
  OpenWindow(#Fenetre2, 300, 10, 300, 600, "Fenetre 2", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
  CanvasGadget(#CanvasFenetre2,Gad.Coo\X, Gad.Coo\Y, Gad.Coo\L, Gad.Coo\H)
  ProcedureReturn 1
EndProcedure


Re: Gestion d'une Nouvelle fenêtre

Publié : dim. 14/août/2016 21:00
par Bernie

Code : Tout sélectionner

Enumeration
  #Main
  #Fenetre1
  #Fenetre2
  #Fenetre3
  #Fenetre4
  #Fenetre5
EndEnumeration

Enumeration
  #Bouton1
  #Bouton2
  #Bouton3
  #Bouton4
  #Bouton5
  #BoutonFenetre1
  #BoutonFenetre2
  #BoutonFenetre3
  #BoutonFenetre4
  #BoutonFenetre5
  #Text
EndEnumeration

Procedure OpenWin_Main()
  If OpenWindow(#Main, 0, 0, 220, 200, "Fenetres", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   
      ButtonGadget(#Bouton1, 10,  10, 200, 20, "Ouvrir fenêtre 1")
      ButtonGadget(#Bouton2, 10,  40, 200, 20, "Ouvrir fenêtre 2")
      ButtonGadget(#Bouton3, 10,  70, 200, 20, "Ouvrir fenêtre 3")
      ButtonGadget(#Bouton4, 10, 100, 200, 20, "Ouvrir fenêtre 4")
      ButtonGadget(#Bouton5, 10, 130, 200, 20, "Ouvrir fenêtre 5")
      TextGadget(#Text, 10, 180, 200, 20, "Pas de fenêtre ouverte", #PB_Text_Center)
  
  EndIf
EndProcedure

Procedure OpenWin_1()
  If OpenWindow(#Fenetre1, 0, 0, 220, 40, "Fenetre 1", #PB_Window_SystemMenu, WindowID(#Main))
   
      ButtonGadget(#BoutonFenetre1, 10,  10, 200, 20, "Fermer fenêtre 1")
      
      ProcedureReturn #True
   
  EndIf
EndProcedure

Procedure OpenWin_2()
  If OpenWindow(#Fenetre2, 0, 70, 220, 40, "Fenetre 2", #PB_Window_SystemMenu, WindowID(#Main))

      ButtonGadget(#BoutonFenetre2, 10,  10, 200, 20, "Fermer fenêtre 2")
      
      ProcedureReturn #True

  EndIf
EndProcedure

Procedure OpenWin_3()
  If OpenWindow(#Fenetre3, 0, 140, 220, 40, "Fenetre 3", #PB_Window_SystemMenu, WindowID(#Main))
    
      ButtonGadget(#BoutonFenetre3, 10,  10, 200, 20, "Fermer fenêtre 3")
      
      ProcedureReturn #True

  EndIf
EndProcedure

Procedure OpenWin_4()
  If OpenWindow(#Fenetre4, 0, 210, 220, 40, "Fenetre 4", #PB_Window_SystemMenu, WindowID(#Main))
    
      ButtonGadget(#BoutonFenetre4, 10,  10, 200, 20, "Fermer fenêtre 4")
      
      ProcedureReturn #True

  EndIf
EndProcedure

Procedure OpenWin_5()
  If OpenWindow(#Fenetre5, 0, 280, 220, 40, "Fenetre 5", #PB_Window_SystemMenu, WindowID(#Main))
   
      ButtonGadget(#BoutonFenetre5, 10,  10, 200, 20, "Fermer fenêtre 5")
      
      ProcedureReturn #True

  EndIf
EndProcedure

OpenWin_Main()

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        ;/ Ouverture des fenêtres "fille"
        Case #Bouton1
          If OpenWin_1()
            SetGadgetText(#Text, "Vous avez ouvert la fenêtre 1")
          EndIf
          
        Case #Bouton2
          If OpenWin_2()
            SetGadgetText(#Text, "Vous avez ouvert la fenêtre 2")
          EndIf
          
        Case #Bouton3
          If OpenWin_3()
            SetGadgetText(#Text, "Vous avez ouvert la fenêtre 3")
          EndIf
          
        Case #Bouton4
          If OpenWin_4()
            SetGadgetText(#Text, "Vous avez ouvert la fenêtre 4")
          EndIf
          
        Case #Bouton5
          If OpenWin_5()
            SetGadgetText(#Text, "Vous avez ouvert la fenêtre 5")
          EndIf
          
          ;/ Femeture des fenêtres "fille" par le bouton
        Case #BoutonFenetre1
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 1")
          CloseWindow(#Fenetre1)
          
        Case #BoutonFenetre2
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 2")
          CloseWindow(#Fenetre2)
          
        Case #BoutonFenetre3
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 3")
          CloseWindow(#Fenetre3)
          
        Case #BoutonFenetre4
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 4")
          CloseWindow(#Fenetre4)
          
        Case #BoutonFenetre5
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 5")
          CloseWindow(#Fenetre5)
          
          
      EndSelect
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        ;/ Fermeture des fenêtres "fille" par l'icône [X]
        Case #Fenetre1
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 1")
          CloseWindow(#Fenetre1)
          
        Case #Fenetre2
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 2")
          CloseWindow(#Fenetre2)
          
        Case #Fenetre3
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 3")
          CloseWindow(#Fenetre3)
          
        Case #Fenetre4
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 4")
          CloseWindow(#Fenetre4)
          
        Case #Fenetre5
          SetGadgetText(#Text, "Vous avez fermé la fenêtre 5")
          CloseWindow(#Fenetre5)
          
          ;/ Fermeture de la fenêtre principale (et fin du programme)
        Case #Main
          Quit = #True
          
      EndSelect
  EndSelect
Until Quit
End

Re: Gestion d'une Nouvelle fenêtre

Publié : dim. 14/août/2016 23:27
par falsam
Zorro a écrit :une regle de base a connaitre, si tu veux qu'on t'aide, faut poster ton code
Inutile de balancer des codes tant que Jeanmarc n'a pas donné plus d'information sur sa demande.

Re: Gestion d'une Nouvelle fenêtre

Publié : ven. 19/août/2016 7:21
par Jeanmarc
Merci et mille excuses pour le temps à vous répondre,

J'ai fait une réponse mais je ne l’ai pas envoyé ou cru l'envoyer.

Je voudrais bien vous envoyer mon code mais il me faut le simplifier car je ne veux pas vous faire perdre votre temps à le décortiquer (+1100 lignes).

En fait tous les Gadgets créés dans la procédure de la seconde fenêtre n'étaient pas reconnus à l’exécution.

En voulant le simplifier pour vous, ce code s'est mis à fonctionner. J'ai corrigé l'erreur sans savoir comment, les gadgets sont les mêmes, seule leur position dans les Enumérations a changé.

JM