un petit programme pour les contacts.

Programmation d'applications complexes
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

un petit programme pour les contacts.

Message par bernard13 »

Bonsoir
voici un petit programme qui permet de crée une liste de contact quand on va sur un site de rencontre ..


Code : Tout sélectionner

;; Mes contact version 00 
; écris par jbernard - copyright 2007 



;Constantes 
 Enumeration
  #Fenetre_main
  #Fenetre_ajouter
 EndEnumeration
 
 Enumeration
  #Liste
  #cadre_0
  #text_pseudo
  #String_pseudo
  #text_prenom
  #String_prenom
  #text_age
  #String_age
  #text_ville
  #String_ville
  #bouton_valide 
  #bouton_annule
  #file
 
 EndEnumeration
 
 Enumeration
 #menu_ajoute
 #menu_sauver
 EndEnumeration
 
 
 ; procedure pour la creation d'un élement de la liste 
 Structure Gestion 
    Pseudo.s 
    Prenom .s 
    Age.s 
    Ville.s
EndStructure 

Global NewList Amies.Gestion() 
 Procedure.b effacer_liste() 
     ClearList (Amies()) 
     ProcedureReturn l 
EndProcedure 

Procedure.b ajoute_Amies() 
     
     If AddElement (Amies()) 
        Amies()\Pseudo= GetGadgetText ( #String_pseudo ) 
        Amies()\Prenom= GetGadgetText (#String_prenom  ) 
        Amies()\Age= GetGadgetText ( #String_age ) 
        Amies()\ville=GetGadgetText(#String_ville)
         AddGadgetItem ( #Liste ,-1,Amies()\Pseudo+ Chr (10)+Amies()\Prenom+ Chr (10)+Amies()\Age+Chr(10)+Amies()\Ville) 
     EndIf 
     ProcedureReturn l 
EndProcedure 
 
 
 
 
 ; Procedure des fenetres 
 Procedure Main_0()
  If OpenWindow(#Fenetre_main,0,0,570,335," Mes Amies ",#PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_TitleBar)
  If CreateMenu(0,WindowID(#Fenetre_main))
    MenuTitle("Fichier")
    MenuItem(#menu_ajoute,"Ajoute une amie")
    MenuItem(#menu_sauver,"Sauvergarde la liste")
  EndIf
   If CreateGadgetList(WindowID(#Fenetre_main))
  ListIconGadget(#Liste,10,20,550,280,"Pseudo :",200,#PB_ListIcon_GridLines|#PB_ListIcon_CheckBoxes)
   AddGadgetColumn(#Liste,1,"Prénom:",100)
   AddGadgetColumn(#Liste,2,"Age:",50)
   AddGadgetColumn(#Liste,3,"Ville:",195)
  EndIf
  EndIf
  ;Chargement du fichier au demarrage du programme  
     If OpenFile ( #file , "Mes_Amies" )<>0 
         ResetList (Amies()) 
         
         OpenFile ( #file , "Mes_Amies" ) 
         While Eof ( #file )=0 
         If AddElement (Amies())
               Amies()\Pseudo= ReadString ( #file ) 
                Amies()\Prenom= ReadString ( #file ) 
                Amies()\Age= ReadString ( #file ) 
                Amies()\Ville=ReadString(#file)
        AddGadgetItem ( #Liste ,-1,Amies()\Pseudo+ Chr (10)+Amies()\Prenom+ Chr (10)+Amies()\Age+Chr(10)+Amies()\Ville) 
             EndIf 
         Wend 
         CloseFile ( #file ) 
  
  
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

Message par case »

il manque un bout de ton programme :)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

case a écrit :il manque un bout de ton programme :)


halleluya!!! Bernard13 à posté du code. Image

Bon... d'accord... Il est pas complet!
Mais c'est déjà un bon début.
On aura sûrement la suite bientôt.

Dans... deux ans :mrgreen:
tonton
Messages : 315
Inscription : mar. 26/avr./2005 15:19

Message par tonton »

hum!












ps:oui! oui! je post juste un "hum". C' est sans doute le post le plus court que j' ai envoyé depuis mon inscription sur ce forum.
pourquoi ce "hum"? moi meme, je ne sais pas trop la raison pour laquelle je l' ai posté.
Est-ce par suspicion?. Serai-je tombé dans un univers parallele ?.....
Donc, en attendant de trouver la réponce a cette énigme , je reste sur cette réponse concise.
Une longue seance de méditation s 'impose....
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message par bernard13 »

milles excuses j'avais oublier le reste en faisant un copie/coller .
voici le programme complet

Code : Tout sélectionner

;Gestion de mes amies sur le web 


;Constantes 
 Enumeration
  #Fenetre_main
  #Fenetre_ajouter
 EndEnumeration
 
 Enumeration
  #Liste
  #cadre_0
  #text_pseudo
  #String_pseudo
  #text_prenom
  #String_prenom
  #text_age
  #String_age
  #text_ville
  #String_ville
  #bouton_valide 
  #bouton_annule
  #file
 
 EndEnumeration
 
 Enumeration
 #menu_ajoute
 #menu_sauver
EndEnumeration
 
 
 ; procedure pour la creation d'un élement de la liste 
 Structure Gestion 
    Pseudo.s 
    Prenom .s 
    Age.s 
    Ville.s
EndStructure 

Global NewList Amies.Gestion() 
 Procedure.b effacer_liste() 
     ClearList (Amies()) 
     ProcedureReturn l 
EndProcedure 

Procedure.b ajoute_Amies() 
     
     If AddElement (Amies()) 
        Amies()\Pseudo= GetGadgetText ( #String_pseudo ) 
        Amies()\Prenom= GetGadgetText (#String_prenom  ) 
        Amies()\Age= GetGadgetText ( #String_age ) 
        Amies()\ville=GetGadgetText(#String_ville)
         AddGadgetItem ( #Liste ,-1,Amies()\Pseudo+ Chr (10)+Amies()\Prenom+ Chr (10)+Amies()\Age+Chr(10)+Amies()\Ville) 
     EndIf 
     ProcedureReturn l 
EndProcedure 
 
 
 
 
 ; Procedure des fenetres 
 Procedure Main_0()
  If OpenWindow(#Fenetre_main,0,0,570,335," Mes Amies",#PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_TitleBar)
  If CreateMenu(0,WindowID(#Fenetre_main))
    MenuTitle("Fichier")
    MenuItem(#menu_ajoute,"Ajoute une amie")
    MenuItem(#menu_sauver,"Sauvergarde la liste")
    
    EndIf
   If CreateGadgetList(WindowID(#Fenetre_main))
  ListIconGadget(#Liste,10,20,550,280,"Pseudo :",200,#PB_ListIcon_GridLines|#PB_ListIcon_CheckBoxes)
   AddGadgetColumn(#Liste,1,"Prénom:",100)
   AddGadgetColumn(#Liste,2,"Age:",50)
   AddGadgetColumn(#Liste,3,"Ville:",195)
  EndIf
  EndIf
  ;Chargement du fichier au demarrage du programme  
     If OpenFile ( #file , "Mes_Amies" )<>0 
         ResetList (Amies()) 
         
         OpenFile ( #file , "Mes_Amies" ) 
         While Eof ( #file )=0 
         If AddElement (Amies())
               Amies()\Pseudo= ReadString ( #file ) 
                Amies()\Prenom= ReadString ( #file ) 
                Amies()\Age= ReadString ( #file ) 
                Amies()\Ville=ReadString(#file)
        AddGadgetItem ( #Liste ,-1,Amies()\Pseudo+ Chr (10)+Amies()\Prenom+ Chr (10)+Amies()\Age+Chr(10)+Amies()\Ville) 
             EndIf 
         Wend 
         CloseFile ( #file ) 
  
  
  
  
  
  
  
  
  
  
  EndIf
 
 
 
 EndProcedure
 
 Procedure Nouvelle()
 If OpenWindow(#Fenetre_ajouter,0,0,320,300,"Nouvelle Amie",#PB_Window_TitleBar|#PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(#Fenetre_ajouter))
  Frame3DGadget(#cadre_0,10,10,300,250,"")
  TextGadget(#text_pseudo,100,25,120,30,"Pseudo :", #PB_Text_Center ) 
  StringGadget(#String_pseudo,50,50,220,20, "" ) 
  TextGadget(#text_prenom,100,80,120,30,"Prénom :",#PB_Text_Center)
  StringGadget(#String_prenom,50,105,220,20,"")
  TextGadget(#text_age,95,135,120,30,"Age :",#PB_Text_Center)
  StringGadget(#String_age,145,160,20,20, "",#PB_String_Numeric ) 
  TextGadget(#text_ville,95,200,120,30,"Ville :",#PB_Text_Center)
  StringGadget(#String_ville,50,220,220,20,"")
  
 ButtonGadget(#bouton_valide,20,275,120,20,"Valider")
 ButtonGadget(#bouton_annule,180,275,120,20,"Annuler")
 EndIf
 EndIf
 Repeat 
         Select WaitWindowEvent () 
             Case #PB_Event_Gadget 
                 Select EventGadget () 
                    Case #bouton_valide 
                      ajoute_Amies()
                       Fermer_window1=1 
                     Case #bouton_annule 
                        fermer_window1=1 
                 EndSelect 
                 
         EndSelect 
     Until fermer_window1=1 
     CloseWindow ( #Fenetre_ajouter ) 
     
  EndProcedure
 
 
 
 
 
 
 
 ;Boucle du programme 
 Main_0()
 
 Repeat 
     Select WaitWindowEvent () 
        Case #PB_Event_Menu ;
         Select EventMenu()
          Case #menu_ajoute :Nouvelle()
        EndSelect 
         
         
        
        Case #PB_Event_CloseWindow 
            fermer_window0=1 
     EndSelect 
Until fermer_window0=1 
;Sauvegarde du fichier  
ResetList (Amies()) 
OpenFile ( #file , "Mes_Amies" ) 
ForEach Amies() 
     WriteStringN ( #file ,Amies()\Pseudo) 
     WriteStringN ( #file ,Amies()\Prenom) 
     WriteStringN ( #file ,Amies()\Age) 
     WriteStringN ( #file, Amies()\Ville)
Next 
CloseFile ( #file)
End
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

Message par case »

alors la chapeau pour quelqu'un qui ne sais plus programmer en pure tu t'en sort vraiment bien :)

bon maintenant il faudrais que tu rajoute la possibilité de modifier le contact par exemple, d'ajouter sa date de naissance et que quand c'est son anniversaire ca te le marque ^^
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message par bernard13 »

merci case
jai écris ce programme il ya plus d'un an deja
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

Message par case »

il est temps que tu t'y remette alors ^^ quoi de mieux pour se remettre dans le bain que de repartir sur quelque chose qu'on connais ^^

en plus il est plutot pas mal ton petit programme ^^ en tout cas tu devrais tenter d'y ajouter les deux trois petite choses que je t'ai suggerer ca serais un bon debut pour te remettre sur les rails de la programation en purebasic et montrer a la face du monde ce que tu peux faire
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

oui je pense aussi que sa pourrai servir a plus d'un si tu veut j'ai cette procedure qui te permet de supprimer de la liste une ou plusieur cases cocher :wink: .

Code : Tout sélectionner

Procedure RemoveGadget()
  i = 0
  Repeat
    If GetGadgetItemState(#Liste, i) & #PB_ListIcon_Checked ; Si l'item est marqué
      RemoveGadgetItem(#Liste,i); on le retire
      ProcedureReturn RemoveGadget(); on rappelle la procedure
    Else
      i+1
    EndIf
  Until i >= CountGadgetItems(#Liste) Or CountGadgetItems(#Liste) = 0
EndProcedure
j'ai aussi remarquer que dans ton menu tu a mis ajouté une amie mais ton logiciel pourrai aussi bien marcher pour les femmes qui recherche des hommes :wink: .

voila tien nous au courant 8)


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message par bernard13 »

merci venom j'ai mis ta procedure pour effacer un element , mon probleme est le suivant: quand j'ai effacer l'element j'e sauve ma liste , mais quand je relance le programme l'element n'a pas ete effacer j'ai rajouter pourtant une procedure pour sauver le fichier mais cela marche pas .

Code : Tout sélectionner

;; Mes contact version 00 
; écris par jbernard - copyright 2007 


;Constantes 
 Enumeration
  #Fenetre_main
  #Fenetre_ajouter
 EndEnumeration
 
 Enumeration
  #Liste
  #cadre_0
  #text_pseudo
  #String_pseudo
  #text_prenom
  #String_prenom
  #text_age
  #String_age
  #text_ville
  #String_ville
  #bouton_valide 
  #bouton_annule
  #file
 
 EndEnumeration
 
 Enumeration
 #menu_ajoute
 #menu_sauver
 #menu_effacer
EndEnumeration
 
 
 ; procedure pour la creation d'un élement de la liste 
 Structure Gestion 
    Pseudo.s 
    Prenom .s 
    Age.s 
    Ville.s
EndStructure 

Global NewList Amies.Gestion() 
 Procedure.b effacer_liste() 
     ClearList (Amies()) 
     ProcedureReturn l 
EndProcedure 

Procedure.b ajoute_Amies() 
     
     If AddElement (Amies()) 
        Amies()\Pseudo= GetGadgetText ( #String_pseudo ) 
        Amies()\Prenom= GetGadgetText (#String_prenom  ) 
        Amies()\Age= GetGadgetText ( #String_age ) 
        Amies()\ville=GetGadgetText(#String_ville)
         AddGadgetItem ( #Liste ,-1,Amies()\Pseudo+ Chr (10)+Amies()\Prenom+ Chr (10)+Amies()\Age+Chr(10)+Amies()\Ville) 
     EndIf 
     ProcedureReturn l 
EndProcedure 
 
 
 Procedure RemoveGadget()
  i = 0
  Repeat
    If GetGadgetItemState(#Liste, i) & #PB_ListIcon_Checked ; Si l'item est marqué
      RemoveGadgetItem(#Liste,i); on le retire
      ProcedureReturn RemoveGadget(); on rappelle la procedure
    Else
      i+1
    EndIf
  Until i >= CountGadgetItems(#Liste) Or CountGadgetItems(#Liste) = 0
EndProcedure
 ; procedure de sauvegarde du fichier 
 Procedure Sauver()
 ResetList (Amies()) 
OpenFile ( #file , "Mes_Amies" ) 
ForEach Amies() 
     WriteStringN ( #file ,Amies()\Pseudo) 
     WriteStringN ( #file ,Amies()\Prenom) 
     WriteStringN ( #file ,Amies()\Age) 
     WriteStringN ( #file, Amies()\Ville)
Next 
CloseFile ( #file)
End
 
 EndProcedure
 
 
 
 ; Procedure des fenetres 
 Procedure Main_0()
  If OpenWindow(#Fenetre_main,0,0,570,335," Mes Amies",#PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_TitleBar)
  If CreateMenu(0,WindowID(#Fenetre_main))
    MenuTitle("Fichier")
    MenuItem(#menu_ajoute,"Ajoute une amie")
    MenuItem(#menu_sauver,"Sauvergarde la liste")
    MenuItem(#menu_effacer,"Effacer une amie de la liste")
    EndIf
   If CreateGadgetList(WindowID(#Fenetre_main))
  ListIconGadget(#Liste,10,20,550,280,"Pseudo :",200,#PB_ListIcon_GridLines|#PB_ListIcon_CheckBoxes)
   AddGadgetColumn(#Liste,1,"Prénom:",100)
   AddGadgetColumn(#Liste,2,"Age:",50)
   AddGadgetColumn(#Liste,3,"Ville:",195)
  EndIf
  EndIf
  ;Chargement du fichier au demarrage du programme  
     If OpenFile ( #file , "Mes_Amies" )<>0 
         ResetList (Amies()) 
         
         OpenFile ( #file , "Mes_Amies" ) 
         While Eof ( #file )=0 
         If AddElement (Amies())
               Amies()\Pseudo= ReadString ( #file ) 
                Amies()\Prenom= ReadString ( #file ) 
                Amies()\Age= ReadString ( #file ) 
                Amies()\Ville=ReadString(#file)
        AddGadgetItem ( #Liste ,-1,Amies()\Pseudo+ Chr (10)+Amies()\Prenom+ Chr (10)+Amies()\Age+Chr(10)+Amies()\Ville) 
             EndIf 
         Wend 
         CloseFile ( #file ) 
  
  
  
  
  
  
  
  
  
  
  EndIf
 
 
 
 EndProcedure
 
 Procedure Nouvelle()
 If OpenWindow(#Fenetre_ajouter,0,0,320,300,"Nouvelle Amie",#PB_Window_TitleBar|#PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(#Fenetre_ajouter))
  Frame3DGadget(#cadre_0,10,10,300,250,"")
  TextGadget(#text_pseudo,100,25,120,30,"Pseudo :", #PB_Text_Center ) 
  StringGadget(#String_pseudo,50,50,220,20, "" ) 
  TextGadget(#text_prenom,100,80,120,30,"Prénom :",#PB_Text_Center)
  StringGadget(#String_prenom,50,105,220,20,"")
  TextGadget(#text_age,95,135,120,30,"Age :",#PB_Text_Center)
  StringGadget(#String_age,145,160,20,20, "",#PB_String_Numeric ) 
  TextGadget(#text_ville,95,200,120,30,"Ville :",#PB_Text_Center)
  StringGadget(#String_ville,50,220,220,20,"")
  
 ButtonGadget(#bouton_valide,20,275,120,20,"Valider")
 ButtonGadget(#bouton_annule,180,275,120,20,"Annuler")
 EndIf
 EndIf
 Repeat 
         Select WaitWindowEvent () 
             Case #PB_Event_Gadget 
                 Select EventGadget () 
                    Case #bouton_valide 
                      ajoute_Amies()
                       Fermer_window1=1 
                     Case #bouton_annule 
                        fermer_window1=1 
                 EndSelect 
                 
         EndSelect 
     Until fermer_window1=1 
     CloseWindow ( #Fenetre_ajouter ) 
     
  EndProcedure
 
 
 
 
 
 
 
 ;Boucle du programme 
 Main_0()
 
 Repeat 
     Select WaitWindowEvent () 
        Case #PB_Event_Menu ;
         Select EventMenu()
          Case #menu_ajoute :Nouvelle()
          Case #menu_sauver:Sauver()
          Case #menu_effacer:RemoveGadget() 
        EndSelect 
         
         
        
        Case #PB_Event_CloseWindow 
            fermer_window0=1 
     EndSelect 
Until fermer_window0=1 

Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

salut,

et bien n'ayant pas fait ce code je t'avoue que j'ai du mal a relire le tien et malhereusement je ne trouve pas :? .

si non j'ai commencer cet exemple :wink:
regarde plus au niveau de la sauvegarde perso je trouve sa mieu et beaucoup plus ranger.

Code : Tout sélectionner

;- Window Constants
Enumeration
  #Window_0
  #Fenetre_ajouter
EndEnumeration

;- Gadget Constants
 Enumeration
  #Window_0
  #Fenetre_ajouter
 EndEnumeration
 
 Enumeration
  #Liste
  #cadre_0
  #text_pseudo
  #String_pseudo
  #text_prenom
  #String_prenom
  #text_age
  #String_age
  #text_ville
  #String_ville
  #bouton_valide
  #bouton_annule
 
 #Button_0
 #Button_1
 #Button_2
 EndEnumeration

 Procedure RemoveGadget()
  i = 0
  Repeat
    If GetGadgetItemState(#Liste, i) & #PB_ListIcon_Checked ; Si l'item est marqué
      RemoveGadgetItem(#Liste, i); on le retire
      ProcedureReturn RemoveGadget(); on rappelle la Procedure
    Else
      i+1
    EndIf
  Until i >= CountGadgetItems(#Liste) Or CountGadgetItems(#Liste) = 0
EndProcedure

 Procedure Nouvelle()
 If OpenWindow(#Fenetre_ajouter,0,0,320,300,"Nouvelle Amie",#PB_Window_TitleBar|#PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(#Fenetre_ajouter))
  Frame3DGadget(#cadre_0,10,10,300,250,"")
  TextGadget(#text_pseudo,100,25,120,30,"Pseudo :", #PB_Text_Center )
  StringGadget(#String_pseudo,50,50,220,20, "")
  TextGadget(#text_prenom,100,80,120,30,"Prénom :",#PB_Text_Center)
  StringGadget(#String_prenom,50,105,220,20,"")
  TextGadget(#text_age,95,135,120,30,"Age :",#PB_Text_Center)
  StringGadget(#String_age,145,160,20,20, "",#PB_String_Numeric )
  TextGadget(#text_ville,95,200,120,30,"Ville :",#PB_Text_Center)
  StringGadget(#String_ville,50,220,220,20,"")
 
 ButtonGadget(#bouton_valide,20,275,120,20,"Valider")
 ButtonGadget(#bouton_annule,180,275,120,20,"Annuler")
 EndIf
 EndIf
 Repeat
         Select WaitWindowEvent ()
             Case #PB_Event_Gadget
                 Select EventGadget ()
                    Case #bouton_valide
                     PreferenceGroup(GetGadgetText(#String_pseudo))
                      WritePreferenceString("Pseudo", GetGadgetText(#String_pseudo))
                      WritePreferenceString("Prénom", GetGadgetText(#String_prenom))
                      WritePreferenceString("Age", GetGadgetText(#String_age))
                      WritePreferenceString("Ville", GetGadgetText(#String_ville))
                     ClosePreferences()

                       Fermer_window1=1
                     Case #bouton_annule
                        fermer_window1=1
                 EndSelect
                 
         EndSelect
     Until fermer_window1=1
     CloseWindow ( #Fenetre_ajouter )
     
  EndProcedure
 

  If OpenWindow(#Window_0, 216, 0, 500, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )

    If CreateGadgetList(WindowID(#Window_0))
      ButtonGadget(#Button_0, 5, 5, 100, 25, "nouvelle fiche")
      ButtonGadget(#Button_2, 110, 5, 100, 25, "supprimé une fiche")
      
      ;-
      ListIconGadget(#Liste, 5, 40, 485, 250, "Pseudo :", 135, #PB_ListIcon_CheckBoxes | #PB_ListIcon_GridLines)
       AddGadgetColumn(#Liste,1,"Prénom:",100)
       AddGadgetColumn(#Liste,2,"Age:",50)
       AddGadgetColumn(#Liste,3,"Ville:",195)
        
        OpenPreferences("Mes_Amies.ini")
          NextPreferenceGroup()

         Pseudo$ = ReadPreferenceString("Pseudo", "")
         Prenom$ = ReadPreferenceString("Prénom", "")
         Age$ = ReadPreferenceString("Age", "")
         Ville$ = ReadPreferenceString("Ville", "")
         
       AddGadgetItem(#Liste, -1, Pseudo$+Chr(10)+Prenom$+Chr(10)+Age$+Chr(10)+Ville$, 0, 0)
       
    EndIf
  EndIf

  Repeat
   EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget 
      Select EventGadget()
      
       Case #Button_0
        Nouvelle()
       
       Case #Button_2
        RemoveGadget()

      EndSelect
    EndIf
  Until EventID = #PB_Event_CloseWindow
il me reste plus qu'a voir comment supprimé un groupe crée avec la fonction preferences().

fin sa ne t'avance pas beaucoup :d mais j'y voie plus claire deja. :wink:


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Lna
Messages : 181
Inscription : mar. 21/juin/2005 11:11

Message par Lna »

Le problème se situe entre le contenu de la liste du ListIconGadget et la liste chainée.
On efface les élements selectionnés dans la liste du ListIconGadget mais pas dans la liste chainée, qui sert de sauvegarde.

Une autre solution pour le RemoveGadget() :

Code : Tout sélectionner

Procedure RemoveGadget() 
  Protected i.l,total_item.l
  
  total_item=CountGadgetItems(#Liste)-1 ; pour compter l'élément 0
  
  For i=total_item To 0 Step -1
 
    If GetGadgetItemState(#Liste, i) & #PB_ListIcon_Checked
      RemoveGadgetItem(#Liste,i)        ; Efface l'élément du ListIconGadget
     
      SelectElement(Amies(),i)
      DeleteElement(Amies())            ; Efface l'élément de la liste chainée
    EndIf
   
  Next i
   
EndProcedure 

Remplacement d'OpenFile par CreateFile pour recréer à chaque fois un nouveau fichier :

Code : Tout sélectionner

Procedure Sauver() 

  ; ResetList (Amies())               ; *** pas utile ForEach en contient un ***
  
  CreateFile ( #file , "Mes_Amies" )  ; *** A la place d'OpenFile ***

  ForEach Amies() 
    WriteStringN ( #file ,Amies()\Pseudo) 
    WriteStringN ( #file ,Amies()\Prenom) 
    WriteStringN ( #file ,Amies()\Age) 
    WriteStringN ( #file, Amies()\Ville) 
  Next
  CloseFile ( #file) 
  
EndProcedure 
Rajout de LastElement(Amies()) pour assurer la synchronisation du contenu de la liste chainée avec le contenu de la liste du ListIconGadget

Code : Tout sélectionner

Procedure.b ajoute_Amies() 
     LastElement(Amies())        ; *** Ajout à la fin de la liste chaînée ***
     If AddElement (Amies()) 
        Amies()\Pseudo= GetGadgetText ( #String_pseudo ) 
        Amies()\Prenom= GetGadgetText (#String_prenom  ) 
        Amies()\Age= GetGadgetText ( #String_age ) 
        Amies()\ville=GetGadgetText(#String_ville) 
         AddGadgetItem ( #Liste ,-1,Amies()\Pseudo+ Chr (10)+Amies()\Prenom+ Chr (10)+Amies()\Age+Chr(10)+Amies()\Ville) 
     EndIf 
     ProcedureReturn l 
EndProcedure 
Le second OpenFile ( #file , "Mes_Amies" ) n'est pas utile.
Dans ce cas If OpenFile ( #file , "Mes_Amies" )<>0 peut aussi être remplacé par : If ReadFile ( #file , "Mes_Amies" )<>0

C'est un programme qui est bien écrit, il se lit bien, et qui utilise les avantages techniques de PureBasic. 8O
C'est loin d'être un programme de débutant. 8)

@ peluche
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

C'est un programme qui est bien écrit, il se lit bien, et qui utilise les avantages techniques de PureBasic.
C'est loin d'être un programme de débutant.
a mais je n'est jamais dit le contraire Lna :wink: selement je ne fait jamais de cette façon la donc j'ai du mal a le comprendre c'est tout. :wink:


@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message par bernard13 »

merci Lna, ça marche , je vais le reecrire encore mieux
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Lna a écrit :C'est un programme qui est bien écrit, il se lit bien, et qui utilise les avantages techniques de PureBasic. 8O
C'est loin d'être un programme de débutant. 8)

@ peluche
Désolé, mais c'est pas mon avis.
Même si ça fonctionne, ça a plus l'air d'un assemblage de bric et de broc que d'un programme.

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.


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.

Tel qu'il est, ce programme est (déjà) un calvaire à débugger. Et encore: heureusement qu'il est court. Imaginez le même genre de programmation, ... mais avec 10 000 lignes de code. :roll:
Répondre