un petit programme pour les contacts.
Je ne vois pas le problème, selon le contexte de la tâche à effectuer, cette méthode est parfaitement valable.Chris a écrit :Que vient faire cette boucle d'évènements en plein milieu d'une procédure? Mystère.
La boucle standard est tout à fait capable de gérer les messages de plusieurs fenêtres, sans avoir besoin d'en mettre une dans chaque procédure qui ouvre une fenêtre.

D'autres méthodes sont aussi tout à fait possibles, comme dans tous les autres programmes terminés ou non.

Etant donnée qu'elle n'est appelée qu'une seule fois dans le programme, de la même manière que l'on définit qu'une unique fois les gadgets, sa place comme sa forme sont tout à fait justifiées.Chris a écrit :Que vient faire cette commande : If OpenFile ( #file , "Mes_Amies" )<>0 dans la procédure d'ouverture de la fenêtre principale?
Elle aurait plus sa place dans une procédure séparée, ce qui permettrait de la rappeler à n'importe quel moment pour recharger la LinkedList, après une modif, par exemple.

Ce n'est pas un programme terminé, mais il prend forme à chaque rajout.

Si ce programme était mal conçu, il ne fonctionnerait pas, ce qui n'est pas le cas.

Ce programme est logique, il ne pose pas difficultés de compréhension rien que pour cette raison.Chris a écrit :Tel qu'il est, ce programme est (déjà) un calvaire à débugger

> Venom
Elle est intéressante ta procédure récursive RemoveGadget(), c'est un bel exemple technique.

@ peluche
Comme ça, tout simplement. Plusieurs fenêtres, une seule boucle.bernard13 a écrit :alors explique ça : La boucle standard est tout à fait capable de gérer les messages de plusieurs fenêtres, sans avoir besoin d'en mettre une dans chaque procédure qui ouvre une fenêtre.
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
bon c'est une autre façon de faire néanmoins la méthode de bernard est tout aussi viable 
on a tous nos méthodes de programmations chacun écrit les choses a sa façon il n'y a pas de méthode meilleur qu'une autre. seul le resultat compte
je ne sais pas comment j'aurais programmer ca personellement mais surement pas exactement de la meme facons que vous l'avez fait tout les deux
ah ca non
j'aurais fait ca a MA manière
sur ce, encourageons bernard pour que son application devienne indispensable pour gerer nos contacts

on a tous nos méthodes de programmations chacun écrit les choses a sa façon il n'y a pas de méthode meilleur qu'une autre. seul le resultat compte

je ne sais pas comment j'aurais programmer ca personellement mais surement pas exactement de la meme facons que vous l'avez fait tout les deux

j'aurais fait ca a MA manière

sur ce, encourageons bernard pour que son application devienne indispensable pour gerer nos contacts

Parce que si la fenêtre s'est bien ouverte, la procédure retourne #true (vrai), et ne retourne rien dans le cas contraire (ce qui équivaut, en fait, à #false (ou faux)).bernard13 a écrit :merci chris de tes precieux conseil
pk tu mets : ProcedureReturn #true= à chaque fois dans les procedures des fenetres filles?
merci quand meme pour ta methode
Ca permet (dans ce cas) de tester si la fenêtre s'est bien ouverte ou non, et d'afficher le message dans le textgadget().
If OpenWin_1()
SetGadgetText(#Text, "Vous avez ouvert la fenêtre 1")
EndIf
J'aurai aussi bien pu mettre
If OpenWin_1()
SetGadgetText(#Text, "Vous avez ouvert la fenêtre 1")
Else
SetGadgetText(#Text, "La fenêtre 1 est coincée.")
EndIf
l'exemple est pas super bien choisi, si ta fenetre ne s'ouvre pas on ne verra pas le gadget, un petit messagerequester convient mieux ^_^Chris a écrit :J'aurai aussi bien pu mettre
If OpenWin_1()
SetGadgetText(#Text, "Vous avez ouvert la fenêtre 1")
Else
SetGadgetText(#Text, "La fenêtre 1 est coincée.")
EndIf
Dri
Ben si, on le voit, puisque la fenêtre appelée par OpenWin_1 est une fenêtre "fille" et que le gadget #Text se trouve dans la fenêtre "mère"Dr. Dri a écrit :l'exemple est pas super bien choisi, si ta fenetre ne s'ouvre pas on ne verra pas le gadget, un petit messagerequester convient mieux ^_^Chris a écrit :J'aurai aussi bien pu mettre
If OpenWin_1()
SetGadgetText(#Text, "Vous avez ouvert la fenêtre 1")
Else
SetGadgetText(#Text, "La fenêtre 1 est coincée.")
EndIf
Dri

bonjour
j'ai récris mon programme de Contact en utilsant que Chris m'a montrer pour la gestion des fenetres filles
voila la nouvelle version :
j'ai récris mon programme de Contact en utilsant que Chris m'a montrer pour la gestion des fenetres filles
voila la nouvelle version :
Code : Tout sélectionner
; Mes contact version 01
; écris par jbernard - copyright 2007
; Les constantes
; Fenetres
Enumeration
#Fenetre_main
#Fenetre_ajouter
EndEnumeration
;Gadgets
Enumeration
#Liste_amie
#Bouton_nouveau
#Bouton_sauver
#bouton_effacer
#bouton_info
#cadre
#text_pseudo
#champ_pseudo
#text_prenom
#champ_prenom
#text_age
#champ_age
#text_ville
#champ_ville
#text_mail
#champ_mail
#bouton_ajouter
#bouton_annule
#file
EndEnumeration
;procedure pour ajouter un ou une ami(e) à la liste
Structure Gestion
Pseudo.s
Prenom.s
Age.s
Ville.s
Email.s
EndStructure
Global NewList Amis.Gestion()
Procedure.b Effacer_liste()
ClearList(Amis())
ProcedureReturn l
EndProcedure
; Creation de la liste chainée
Procedure.b ajoute_amis()
LastElement(Amis())
If AddElement(Amis())
Amis()\Pseudo=GetGadgetText(#champ_pseudo)
Amis()\Prenom=GetGadgetText(#champ_prenom)
Amis()\Age=GetGadgetText(#champ_age)
Amis()\Ville=GetGadgetText(#champ_ville)
Amis()\Email=GetGadgetText(#champ_mail)
AddGadgetItem(#Liste_amie,-1,Amis()\pseudo+Chr(10)+Amis()\Prenom+Chr(10)+Amis()\age+Chr(10)+Amis()\ville+Chr(10)+Amis()\Email)
EndIf
ProcedureReturn l
EndProcedure
;Procedure d'effacement d'un nom de la liste
Procedure Supprimer_nom()
Protected i,total_item.l
total_item=CountGadgetItems(#Liste_amie)-1
For i=total_item To 0 Step -1
If GetGadgetItemState(#Liste_amie,i)&#PB_ListIcon_Checked
RemoveGadgetItem(#Liste_amie,i)
SelectElement(Amis(),i)
DeleteElement(Amis())
EndIf
Next i
EndProcedure
; procedure de sauvegarde du fichier
Procedure sauver()
ResetList(Amis())
CreateFile(#file,"Contact.dat")
ForEach Amis()
WriteStringN(#file,Amis()\Pseudo)
WriteStringN(#file,Amis()\Prenom)
WriteStringN(#file,Amis()\Age)
WriteStringN(#file,Amis()\Ville)
WriteStringN(#file,Amis()\Email)
Next
CloseFile(#file)
EndProcedure
;Procedure des fenetres
; Fenetre principale
Procedure main()
If OpenWindow(#Fenetre_main,0,0,640,345," Mes Contacts version 01-2007",#PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_TitleBar)
If CreateGadgetList(WindowID(#Fenetre_main))
ListIconGadget(#Liste_amie,10,50,620,280,"Pseudo :",150,#PB_ListIcon_GridLines|#PB_ListIcon_CheckBoxes)
AddGadgetColumn(#Liste_amie,1,"Prénom:",100)
AddGadgetColumn(#Liste_amie,2,"Age:",50)
AddGadgetColumn(#Liste_amie,3,"Ville:",195)
AddGadgetColumn(#Liste_amie,4,"Email:",200)
ButtonGadget(#Bouton_nouveau,10,10,120,30,"Ajouter un contact")
ButtonGadget(#Bouton_sauver,150,10,120,30,"Sauver la liste")
ButtonGadget(#Bouton_effacer,290,10,120,30,"Effacer un contact")
ButtonGadget(#bouton_info,435,10,120,30,"Information")
EndIf
EndIf
EndProcedure
;Fenetre ajouter un ami ou une amie
Procedure ajouter()
If OpenWindow(#Fenetre_ajouter,0,0,320,340,"Ajouter un nouveau contact",#PB_Window_TitleBar|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#Fenetre_ajouter))
Frame3DGadget(#cadre,10,10,300,280,"")
TextGadget(#text_pseudo,90,25,120,30,"Pseudo :",#PB_Text_Center)
StringGadget(#champ_pseudo ,45,45,220,20,"")
TextGadget(#text_prenom,90,75,120,30,"Prenom :",#PB_Text_Center)
StringGadget(#champ_prenom,45,95,220,20,"")
TextGadget(#text_age,90,125,120,30,"Age :",#PB_Text_Center)
StringGadget(#champ_age,135,145,25,20,"",#PB_String_Numeric)
TextGadget(#text_ville,90,175,120,30,"Ville :",#PB_Text_Center)
StringGadget(#champ_ville,45,195,220,20,"")
TextGadget(#text_mail,90,225,120,30,"Email :",#PB_Text_Center)
StringGadget(#champ_mail,45,245,220,20,"")
ButtonGadget(#bouton_ajouter,20,300,120,30,"Ajouter")
ButtonGadget(#bouton_annule,180,300,120,30,"Annuler")
ProcedureReturn #True
EndIf
EndIf
EndProcedure
;Boucle du programme
main()
;Chargement de la liste au demarrage du programme
If OpenFile(#file,"Contact.dat")<>0
ResetList(Amis())
OpenFile(#file,"Contact.dat")
While Eof(#file)=0
If AddElement(Amis())
Amis()\Pseudo=ReadString(#file)
Amis()\Prenom=ReadString(#file)
Amis()\Age=ReadString(#file)
Amis()\Ville=ReadString(#file)
Amis()\Email=ReadString(#file)
AddGadgetItem(#Liste_amie,-1,Amis()\pseudo+Chr(10)+Amis()\Prenom+Chr(10)+Amis()\age+Chr(10)+Amis()\ville+Chr(10)+Amis()\Email)
EndIf
Wend
CloseFile(#file)
EndIf
; programation de la gestion des evenements des fenetres
Repeat
Select WaitWindowEvent ()
Case #PB_Event_Gadget
Select EventGadget()
Case #Bouton_nouveau:ajouter()
Case#bouton_sauver:sauver()
Case #bouton_effacer:Supprimer_nom()
Case #bouton_info:MessageRequester("Information","Contact crée par Jbernard copyright 2007",#PB_MessageRequester_Ok)
Case #bouton_ajouter:ajoute_amis()
CloseWindow(#Fenetre_ajouter)
Case #bouton_annule
CloseWindow(#Fenetre_ajouter)
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Fenetre_main
Quit=#True
EndSelect
EndSelect
Until Quit
End
c'est facile, tu lances l'éditeur purebasic, tu vas dans l'aide et tu regardes les exemples pour essayer de les comprendre. si tu as bien pensé à lancer l'éditeur tu pourras même les tester immédiatement.bernard13 a écrit :comment je peux rajouter une bar de status qui indiquerais le nombre de contact dans la liste
si quelqu'un peux m'expliquer comment faire svp
Dri
