Gestion d'une Nouvelle fenêtre

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Jeanmarc
Messages : 46
Inscription : ven. 10/juin/2016 16:11

Gestion d'une Nouvelle fenêtre

Message 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
Dernière modification par Jeanmarc le dim. 14/août/2016 16:19, modifié 1 fois.
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Gestion d'une Nouvelle fenêtre

Message 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
Marc56
Messages : 2196
Inscription : sam. 08/févr./2014 15:19

Re: Gestion d'une Nouvelle fenêtre

Message 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:
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Gestion d'une Nouvelle fenêtre

Message 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

~~~~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
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: Gestion d'une Nouvelle fenêtre

Message 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
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Gestion d'une Nouvelle fenêtre

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Jeanmarc
Messages : 46
Inscription : ven. 10/juin/2016 16:11

Re: Gestion d'une Nouvelle fenêtre

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