[Résolu] Je tourne en rond - Fenetres et Repeat Untill

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
kerkael
Messages : 97
Inscription : mer. 03/sept./2008 21:08

[Résolu] Je tourne en rond - Fenetres et Repeat Untill

Message par kerkael »

Bon, j'ai quelques soucis et j'ai besoin d'un cours, et d'un coup de main.

J'ai plusieurs fenêtres qui vont s'ouvrir en séquence, selon les choix faits dans les fenêtres précédentes.

Est-ce que je dois :
- ouvrir toutes mes fenêtres avant Repeat et les cacher jusqu'à ce qu'elles soient appelées, et donc n'avoir qu'une seule boucle Untill ?
- faire une boucle Repeat Untill dans chaque fenêtre et y tester tous les gadgets qu'elle contient ?
- appeler mes fenêtres dans des procédures et faire du Repeat Untill dans les procédures ?

J'ai l'impression que les multiples Repeat Untill de diverses fenêtres se chevauchent si je ne fais que cacher les fenêtres au lieu de les fermer.

Je comptais réutiliser les constantes énumérées de certains gadgets d'une fenêtre sur l'autre, mais ça pose des soucis au débogueur qui me dit que certains gadgets ne sont pas initialisés, alors que je sais qu'ils le sont. Qui a raison ? Moi ou le débogueur ?

Un p'tit cours sur les Boucles et le Fenêtres ? M'ci
Dernière modification par kerkael le ven. 03/oct./2008 11:22, modifié 1 fois.
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

salut kerkael

regarde ce code :

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)
    If CreateGadgetList(WindowID(0))
      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
  EndIf
EndProcedure

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

Procedure OpenWin_2()
  If OpenWindow(#Fenetre2, 0, 70, 220, 40, "Fenetre 2", #PB_Window_SystemMenu, WindowID(#Main))
    If CreateGadgetList(WindowID(#Fenetre2))
      ButtonGadget(#BoutonFenetre2, 10,  10, 200, 20, "Fermer fenêtre 2")
     
      ProcedureReturn #True
    EndIf
  EndIf
EndProcedure

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

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

Procedure OpenWin_5()
  If OpenWindow(#Fenetre5, 0, 280, 220, 40, "Fenetre 5", #PB_Window_SystemMenu, WindowID(#Main))
    If CreateGadgetList(WindowID(#Fenetre5))
      ButtonGadget(#BoutonFenetre5, 10,  10, 200, 20, "Fermer fenêtre 5")
     
      ProcedureReturn #True
    EndIf
  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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: [HelpMe] Je tourne en rond - Fenetres et Repeat Untill

Message par Backup »

kerkael a écrit :Bon, j'ai quelques soucis et j'ai besoin d'un cours, et d'un coup de main.

J'ai plusieurs fenêtres qui vont s'ouvrir en séquence, selon les choix faits dans les fenêtres précédentes.

sans vouloir etre mechant

je commence a en avoir marre des questions a la cons comme la tienne
alors que la réponse se trouve MULTIPLE dans le forum !!!!

j'ai perdu quelques minutes a te trouver une réponse
celle-ci entre autre :
http://www.purebasic.fr/french/viewtopi ... ht=fenetre

alors si moi j'ai perdu du temps a chercher, pourquoi pas toi !!??? :?

faut pas déconner !!
IL Y A UN BOUTON RECHERCHER
en haut du forum, faudrai voir a l'utiliser !!

ce forum a suffisamment d'existence, pour combler la majorité des réponses...

alors nom de Diou! de nom de diou !

CHERCHEZ UN PEU !!!

:)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

T'a raison mon DOBRO.
Mais t'enerve pas........c'est pas bon à notre age :lol:
kerkael
Messages : 97
Inscription : mer. 03/sept./2008 21:08

Message par kerkael »

tttt ....
Je reconnais que ma question peut avoir déjà été traitée, mais est-ce que ça signifie que je dois lire tout le forum pour tomber sur le contenu d'un message qui va me donner la réponse, alors que l'intitulé des sujets est la plupart du temps sinon non-explicite carrément hors-sujet ?

Pour être un utilisateur de nombreux forums, et recevoir chaque jour entre 300 et 1000 mails au bureau, j'insiste systématiquement pour que les sujets de ces messages soient explicites. Et comme d'habitude, on me fait valoir que c'est moi qui ne sait pas lire, chercher, trouver les infos ... Désolé si elles ne sont pas à leur place.

Si je m'en tiens au lien que tu m'as donné, le titre du message :
je me rappelle plus comment ouvrir une deuxième fenêtre ne me donne pas envie de le lire pour obtenir la réponse à ma question, alors que la réponse s'y trouve.
kerkael
Messages : 97
Inscription : mer. 03/sept./2008 21:08

Message par kerkael »

Ah, et encore merci pour ces formidables exemples ... que je n'ai pas su repérer en faisant une recherche.

N'empêche que j'aurais bien aimé avoir des explications sur les implications de multiples boucles Repeat Untill si je n'ai pas fermé les autres fenêtres. En regardant Mon gestionnaire des Tâches de windows, il m'arrive de voir des PureBasic(1), PureBasic(2)... alors que je croyais être sorti de mon programme.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

kerkael a écrit :Ah, et encore merci pour ces formidables exemples ... que je n'ai pas su repérer en faisant une recherche.

N'empêche que j'aurais bien aimé avoir des explications sur les implications de multiples boucles Repeat Untill si je n'ai pas fermé les autres fenêtres. En regardant Mon gestionnaire des Tâches de windows, il m'arrive de voir des PureBasic(1), PureBasic(2)... alors que je croyais être sorti de mon programme.
ben oui tu aurai bien aimé !! :?

mais voila , moi je suis pas payé pour te donner tes réponses, personne ici ne l'est d'ailleurs !!

on est tous des benevoles, qui passons du temps et du bon vouloir a aider les autres, mais rien nous y oblige !!!


et pourtant (malgres le ton de ton message) je vais quand meme te repondre.....

si ton gestionnaire de taches t'indique plusieurs instances de purebasic ce n'est pas due aux boucles d'event !!

mais tous simplement au fait que des sessions de prg n'ont pas ete fermé, ou ne sont pas close !!

les boucles d'evant n'ont rien a voir la dedans !!

un seul prg peut faire apparaitre plusieurs instance dans le gestionnaire des taches, seulement, et seulement si, s'il utilise les Threads !!
ou lance un autre prg....

pour répondre a ta question première

tout dépends ce que tu veux faire

1- tu peux avoir une fenêtre "mère"
et des fenêtres "filles" qui dépendent de la fenêtre "mère"
(modal, ou MDI)


2- tu peux avoir différente fenetre "mere" indépendante
le tout pouvant etre geré avec une seule boucle d'évent, ou
alors plusieurs boucle d'évent (1 par fenetre)...


il n'y as pas de "meilleur" ou "moins bonne" façon de faire, c'est aux choix , c'est tout..... :)


ps :
Je reconnais que ma question peut avoir déjà été traitée, mais est-ce que ça signifie que je dois lire tout le forum pour tomber sur le contenu d'un message qui va me donner la réponse, alors que l'intitulé des sujets est la plupart du temps sinon non-explicite carrément hors-sujet ?
justement c'est comme ça qu'on tombe sur des sujets qui apportent leur lot d'interet
en lisant le forum, tu vas tomber sur des perles !!

la curiosité est un atout en programmation :)

ton propre titre de sujet n'est pas plus explicite pour autant !!
Je tourne en rond - Fenetres et Repeat Untill
plus tard , il y aura quelqu'un comme toi, qui vas me faire la même réflexion, lorsque je lui parlerai de ton topic !!
jbernard13
Messages : 1501
Inscription : dim. 18/avr./2004 15:04
Localisation : sud de la france

Message par jbernard13 »

kerkael

si tu as dans ton gestionnaire des Tâches de windows plusieurs PureBasic(1), PureBasic(2) etc...

c'est que ta boucle est mauvaise

deja tu aurait posté un code meme si il marche pas trop bien et on t'aurait aidé ..

je t'ai posté un code qui gere plusieurs avec un Repeat/ until
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Pas vraiment une histoire de boucle Jb13, c'est que la fenêtre du prog a peut-être disparu, mais que le prog n'a pas été terminé. (rien de tel qu'un petit End après un closewindow(*) par exemple).

Sinon pour revenir à ces questions récurrentes de "recherche", il est vrai que les sujets sont parfois peu explicites. Et c'est parfois pénible de trouver une solution malgrés une recherche approfondie. Cela vient de phpbb qui n'est pas au top coté recherche mais aussi des posteur qui sont parfois vagues.
Maintenant je comprends aussi comprendre ces petits coups de gueules qui viennent de gens plus habitués à ce fofo qui se retrouvent souvent à répéter 15 fois les mêmes choses.
Le tout c'est de pas se pendre la tête pour ce genre de choses.

Si ce j'espère que tu as trouvé ta méthose pour ton histoire de fenêtres multiples. :wink:

Perso si j'ouvre la fenêtre 2, je cache la 1ere, et si je quitte ma fenetre 2 la fenetre 1 reapparait.. En quittant la fenetre 1 alors je place un END
~~~~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
Répondre