PureBasic

Forums PureBasic
Nous sommes le Ven 25/Mai/2018 21:41

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 10 messages ] 
Auteur Message
 Sujet du message: Un repertoire ...
MessagePosté: Ven 08/Sep/2017 6:17 
Hors ligne

Inscription: Jeu 07/Sep/2017 20:36
Messages: 8
Code:
Un petit répertoire que chacun ... moyennant quelques aménagements pourra adapter à ses désirs.

;----------------------------------
;  Répertoire ...
;  Paul(PE)
;  08-09-2017
;  PureBasic 5.60 (Linux - x64)
;-------------------------------


Declare contact_fenetre(Fen)
Declare contact_nouveau()
Declare quitter(Fen)
Declare contact_chargement()
Declare enregistrer_contact_nouveau()
Declare changement_dans_liste()
Declare touche_entree()
Declare contact_sauvegarde()
Declare contact_consulter ()
Declare contact_supprimer ()
Declare contact_lister()
Declare contact_modifier()
Declare contact_modification()


Enumeration Fenetres
  #Fenetre_Contact
  #Fenetre_Nouveau
  #Fenetre_Consulter
  #Fenetre_Modifier
  #Fenetre_lister
EndEnumeration

Enumeration Gadgets 
  #Contact_Cont1
  #Lib_Contact_Lib1
  #Bou_Contact_Consulter
  #Bou_Contact_Modifier
  #Bou_Contact_Supprimer
  #Bou_Contact_Neant4
  #Bou_Contact_Nouveau
  #Bou_Contact_Fermer
  #Contact_combo
  #Contact_Cont2
  #Contact_Calendrier
 
  #Nouveau_Nom
  #Nouveau_Prenom
  #Nouveau_Info1
  #Nouveau_Info2
  #Nouveau_Info3
  #Nouveau_Info4
  #Bou_Nouveau_enregistrer
  #Bou_Nouveau_sortir
 
  #Consulter_Nom
  #Consulter_Prenom
  #Consulter_Info1
  #Consulter_Info2
  #Consulter_Info3
  #Consulter_Info4
  #Bou_Consulter_retour
 
  #Modifier_Nom
  #Modifier_Prenom
  #Modifier_Info1
  #Modifier_Info2
  #Modifier_Info3
  #Modifier_Info4
  #Bou_Modifier_Valider
  #Bou_Modifier_Retour
   
  #Bou_Contact_liste
  #Contact_lister_liste
  #Bou_contact_lister_Retour 
EndEnumeration

Enumeration
  #Return
EndEnumeration


Structure identite
  Nom$
  Prenom$
  Info1$
  Info2$
  Info3$
  Info4$
EndStructure

Global NewMap Contact1.identite()
Global n$, p$, v1$, v2$, v3$, v4$
Global selection$, filename$
filename$ = "repertoire.txt"

Procedure quitter(Fen)
  CloseWindow(Fen)
  End
EndProcedure

Procedure contact_chargement()
 
  If ReadFile(0, filename$)
    While Eof(0) = 0
      n$=ReadString(0)
      p$=ReadString(0)
      v1$=ReadString(0)
      v2$=ReadString(0)
      v3$=ReadString(0)
      v4$=ReadString(0)
   
      a$ = n$+" "+p$

      Contact1(a$)\Nom$ = n$
      Contact1(a$)\Prenom$ = p$
      Contact1(a$)\Info1$ = v1$
      Contact1(a$)\Info2$ = v2$
      Contact1(a$)\Info3$ = v3$
      Contact1(a$)\Info4$ = v4$
    Wend
  Else
    If CreateFile(0, filename$)
    EndIf
   
  EndIf
  CloseFile(0)
  ProcedureReturn
EndProcedure

Procedure contact_sauvegarde()
  If CreateFile(0, filename$)
    ForEach Contact1()
      WriteStringN(0, (Contact1()\Nom$))
      WriteStringN(0, (Contact1()\Prenom$))
      WriteStringN(0, (Contact1()\Info1$))
      WriteStringN(0, (Contact1()\Info2$))
      WriteStringN(0, (Contact1()\Info3$))
      WriteStringN(0, (Contact1()\Info4$))
    Next
    CloseFile(0)
  EndIf
  ProcedureReturn
EndProcedure

Procedure enregistrer_contact_nouveau()
  n$ = (GetGadgetText(#Nouveau_Nom))
  p$ = (GetGadgetText(#Nouveau_Prenom))
  v1$ = (GetGadgetText(#Nouveau_Info1))
  v2$ = (GetGadgetText(#Nouveau_Info2))
  v3$ = (GetGadgetText(#Nouveau_Info3))
  v4$ = (GetGadgetText(#Nouveau_Info4))
 
  SetGadgetText(#Nouveau_Nom, "")
  SetGadgetText(#Nouveau_Prenom, "")
  SetGadgetText(#Nouveau_Info1, "")
  SetGadgetText(#Nouveau_Info2, "")
  SetGadgetText(#Nouveau_Info3, "")
  SetGadgetText(#Nouveau_Info4, "")
 
  a$ = n$+" "+p$
 
  Contact1(a$)\Nom$ = n$
  Contact1(a$)\Prenom$ = p$
  Contact1(a$)\Info1$ = v1$
  Contact1(a$)\Info2$ = v2$
  Contact1(a$)\Info3$ = v3$
  Contact1(a$)\Info4$ = v4$
  SetActiveGadget(#Nouveau_Nom)
  contact_sauvegarde()
  ProcedureReturn
EndProcedure

Procedure contact_consulter()
   CloseWindow(#Fenetre_Contact)
  If OpenWindow(#Fenetre_Consulter, 480, 160, 250, 250, "Contact", #PB_Window_SystemMenu )

        StringGadget(#Consulter_Nom, 10, 10, 230, 30, Contact1(selection$)\Nom$)
        StringGadget(#Consulter_Prenom, 10, 40, 230, 30, Contact1(selection$)\Prenom$)
        StringGadget(#Consulter_Info1, 10, 80, 230, 30, Contact1(selection$)\Info1$)
        StringGadget(#Consulter_Info2, 10, 110, 230, 30, Contact1(selection$)\Info2$)
        StringGadget(#Consulter_Info3, 10, 140, 230, 30, Contact1(selection$)\Info3$)
        StringGadget(#Consulter_Info4, 10, 170, 230, 30, Contact1(selection$)\Info4$)
        ;ButtonGadget(#Bou_Nouveau_enregistrer, 10, 210, 112, 20, "Ok")
        ButtonGadget(#Bou_Consulter_retour, 10, 210, 230, 20, "Retour")
     
        Repeat
          Event = WaitWindowEvent()
         
          Select Event       
            Case #PB_Event_Gadget
              Select EventGadget()
                  Case #Bou_Consulter_retour
                    contact_fenetre(#Fenetre_Consulter)
              EndSelect
       
          EndSelect
        Until Event = #PB_Event_CloseWindow
      EndIf
EndProcedure
   

Procedure contact_modification() 
   DeleteMapElement(Contact1(), selection$)
   n$ = (GetGadgetText(#Modifier_Nom))
   p$ = (GetGadgetText(#Modifier_Prenom))
   v1$ = (GetGadgetText(#Modifier_Info1))
   v2$ = (GetGadgetText(#Modifier_Info2))
   v3$ = (GetGadgetText(#Modifier_Info3))
   v4$ = (GetGadgetText(#Modifier_Info4))
   
    a$ = n$+" "+p$
  Contact1(a$)\Nom$ = n$
  Contact1(a$)\Prenom$ = p$
  Contact1(a$)\Info1$ = v1$
  Contact1(a$)\Info2$ = v2$
  Contact1(a$)\Info3$ = v3$
  Contact1(a$)\Info4$ = v4$
 
  contact_sauvegarde()
  contact_fenetre(#Fenetre_Modifier)
EndProcedure

Procedure contact_modifier()
   CloseWindow(#Fenetre_Contact)
  If OpenWindow(#Fenetre_Modifier, 480, 160, 250, 250, "Contact", #PB_Window_SystemMenu )

        StringGadget(#Modifier_Nom, 10, 10, 230, 30, Contact1(selection$)\Nom$)
        StringGadget(#Modifier_Prenom, 10, 40, 230, 30, Contact1(selection$)\Prenom$)
        StringGadget(#Modifier_Info1, 10, 80, 230, 30, Contact1(selection$)\Info1$)
        StringGadget(#Modifier_Info2, 10, 110, 230, 30, Contact1(selection$)\Info2$)
        StringGadget(#Modifier_Info3, 10, 140, 230, 30, Contact1(selection$)\Info3$)
        StringGadget(#Modifier_Info4, 10, 170, 230, 30, Contact1(selection$)\Info4$)
        ButtonGadget(#Bou_Modifier_Valider, 10, 210, 112, 20, "Modifier")
        ButtonGadget(#Bou_Modifier_Retour, 127, 210, 112, 20, "Annuler")
     
        Repeat
          Event = WaitWindowEvent()         
          Select Event       
            Case #PB_Event_Gadget
              Select EventGadget()
                  Case #Bou_Modifier_Valider
                    contact_modification()
                  Case #Bou_Modifier_Retour
                    contact_fenetre(#Fenetre_Modifier)
              EndSelect
       
         EndSelect
       Until Event = #PB_Event_CloseWindow
  EndIf
EndProcedure

Procedure contact_lister()
  If OpenWindow(#Fenetre_lister, 530, 205, 195, 200, "listing", #PB_Window_SystemMenu )
    ListViewGadget(#Contact_lister_liste,10,10,175,150)
   
    NewList listing1.s()
      ForEach Contact1()
        AddElement(listing1())
        listing1() = (MapKey (Contact1()))
      Next   
      SortList( listing1(), #PB_Sort_Ascending )
     
      ForEach listing1()
        AddGadgetItem(#Contact_lister_liste, -1, listing1())
      Next
         
   ButtonGadget(#Bou_contact_lister_Retour, 10, 165, 175, 25, "Annuler")
     
        Repeat
          Event = WaitWindowEvent()         
          Select Event       
            Case #PB_Event_Gadget
              Select EventGadget()
                Case #Bou_contact_lister_Retour
                  CloseWindow(#Fenetre_lister)
                  ProcedureReturn
                Case #Contact_lister_liste
                      Select EventType()
                        Case #PB_EventType_LeftClick 
                          changement_dans_liste()
                          CloseWindow(#Fenetre_lister)
                          ProcedureReturn
                         
                      EndSelect
             EndSelect
         EndSelect
       Until Event = #PB_Event_CloseWindow
  EndIf
EndProcedure

Procedure contact_supprimer()
  DeleteMapElement(Contact1(), selection$)
  contact_sauvegarde()
  contact_fenetre(#Fenetre_Contact)
EndProcedure

Procedure changement_dans_liste()
  selection$ = (GetGadgetText(#Contact_lister_liste))
  DisableGadget(#Bou_Contact_Consulter, #False)
  DisableGadget(#Bou_Contact_Modifier, #False)
  DisableGadget(#Bou_Contact_Supprimer, #False)
  ProcedureReturn
EndProcedure

Procedure touche_entree()
   Nb.i = GetActiveGadget()
   Select Nb
     Case #Nouveau_Nom
       SetActiveGadget(#Nouveau_Prenom)
     Case #Nouveau_Prenom
       SetActiveGadget(#Nouveau_Info1)
     Case #Nouveau_Info1
       SetActiveGadget(#Nouveau_Info2)
     Case #Nouveau_Info2
       SetActiveGadget(#Nouveau_Info3)
     Case #Nouveau_Info3
       SetActiveGadget(#Nouveau_Info4)
     Case #Nouveau_Info4
       enregistrer_contact_nouveau()     
  EndSelect   
  ProcedureReturn
 
EndProcedure

Procedure contact_nouveau()
  CloseWindow(#Fenetre_Contact)
  If OpenWindow(#Fenetre_Nouveau, 480, 160, 250, 250, "Nouveau Contact", #PB_Window_SystemMenu )

        StringGadget(#Nouveau_Nom, 10, 10, 230, 30, "Nom")
        StringGadget(#Nouveau_Prenom, 10, 40, 230, 30, "Prenom")
        StringGadget(#Nouveau_Info1, 10, 80, 230, 30, "Info1")
        StringGadget(#Nouveau_Info2, 10, 110, 230, 30, "Info2")
        StringGadget(#Nouveau_Info3, 10, 140, 230, 30, "Info3")
        StringGadget(#Nouveau_Info4, 10, 170, 230, 30, "Info4")
        ButtonGadget(#Bou_Nouveau_enregistrer, 10, 210, 112, 20, "Enregistrer")
        ButtonGadget(#Bou_Nouveau_sortir, 127, 210, 112, 20, "Annuler")
       
        AddKeyboardShortcut(#Fenetre_Nouveau, #PB_Shortcut_Return, #Return)       
        SetActiveGadget(#Nouveau_Nom)
     
        Repeat
          Event = WaitWindowEvent()
       
          Select Event       
            Case #PB_Event_Gadget
              Select EventGadget()
                  Case #Bou_Nouveau_enregistrer
                    enregistrer_contact_nouveau()
                  Case #Bou_Nouveau_sortir
                    contact_fenetre(#Fenetre_Nouveau)
              EndSelect
               
           Case #PB_Event_Menu
              Select EventMenu()
                  Case #Return
                    touche_entree()
              EndSelect               
       EndSelect
     Until Event = #PB_Event_CloseWindow
   EndIf
EndProcedure

Procedure contact_fenetre(Fen)
  CloseWindow(Fen)
  contact_chargement()
  colorContact = $87C1A3
    If OpenWindow(#Fenetre_Contact, 380, 160, 510, 400, "Répertoire", #PB_Window_SystemMenu )
      If LoadFont(0, "Arial", 13)
        SetGadgetFont(#PB_Default, FontID(0))   ; la police par défaut est remplacée par celle chargée (Arial 16)
      EndIf
      TextGadget(#Lib_Contact_Lib1, 180, 10,130,20,"  REPERTOIRE  ",#PB_Text_Center | #PB_Text_Border)
      SetGadgetColor(#Lib_Contact_Lib1, #PB_Gadget_BackColor, colorContact)
      SetGadgetFont(#PB_Default, #PB_Default)  ; remet la police par défaut originale (standard)
      ButtonGadget(#Bou_Contact_Consulter, 10, 45, 130, 30, "Consulter")
      DisableGadget(#Bou_Contact_Consulter, #True)
      ButtonGadget(#Bou_Contact_Modifier, 10, 77, 130, 30, "Modifier")
      DisableGadget(#Bou_Contact_Modifier, #True)
      ButtonGadget(#Bou_Contact_Supprimer, 10, 109, 130, 30, "Supprimer")
      DisableGadget(#Bou_Contact_Supprimer, #True)
      ButtonGadget(#Bou_Contact_Nouveau, 355, 45, 135, 30, "Nouveau")
      ButtonGadget(#Bou_Contact_Fermer, 355, 77, 135, 30, "Fermer")
      ButtonGadget(#Bou_Contact_Neant4, 355, 109, 135, 30, "")
      ContainerGadget(#Contact_Cont2, 50, 150, 400, 30, #PB_Container_Double)
      SetGadgetColor(#Contact_Cont2, #PB_Gadget_BackColor, colorContact)
      CloseGadgetList()
     
      ButtonGadget(#Bou_Contact_liste, 150, 45, 195, 20, "listing")
     
      CalendarGadget(#Contact_Calendrier, 100, 190, 300, 170)
   
      Repeat       
        Event = WaitWindowEvent()       
        Select Event
            Case #PB_Event_Gadget
              Select EventGadget()
                 
                  Case #Bou_Contact_Consulter : contact_consulter()
                   
                  Case #Bou_Contact_Modifier : contact_modifier()
                   
                  Case #Bou_Contact_Supprimer : contact_supprimer()
                   
                  Case #Bou_Contact_liste : contact_lister()
                   
                  Case #Bou_Contact_Nouveau
                    contact_nouveau()
                  Case #Bou_Contact_Fermer
                    quitter(#Fenetre_Contact)
                 
            EndSelect
       EndSelect       
     Until Event = #PB_Event_CloseWindow
     
  EndIf
EndProcedure

contact_fenetre(-1)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un repertoire ...
MessagePosté: Ven 08/Sep/2017 6:32 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 1901
Localisation: 50200 Coutances
Merci pour le partage, fonctionne sur Windows aussi.

_________________
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.45 LTS, 5.62
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un repertoire ...
MessagePosté: Ven 08/Sep/2017 13:33 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1271
Bienvenu Paul,

Joli, mais quelques défauts de conception :wink:

  • Un CloseFile(0) au mauvais endroit et qui échoue si le fichier n’existe pas.
    :arrow: Mettre un CloseFile dans chaque boucle concernée ou utiliser If Isfile(0) : CloseFile(0) : EndIf
  • Il est conseillé d'utiliser aussi des constantes ou des variables pour les handles de fichier plutôt que des numéros
    :arrow: CloseFile(#DataFile)
    Avec un handele numérique, le jour où tu as plusieurs fichiers, tu as vite fais d'oublier le numéro en cours et de fermer/ouvrir/écrire le mauvais fichier.
  • Plusieurs boucles WaitWindowEvent() ce qui n'est pas conseillé
    :arrow: (Si l'utilisateur passe d'une fenêtre à l'autre, la gestion des évènements ne fonctionne plus)

8)

_________________
Windows 10 x64 - CPU intel i3 - RAM 16Go - Video NVidia GT 620 - 1920x1080
Linux Slackware et Debian 64bits / xfce - (VirtualBox 5)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un repertoire ...
MessagePosté: Ven 08/Sep/2017 14:37 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6449
Localisation: Isere
Pas mal :wink:

Rapidement :

Le bouton Listing manque la majuscule du début
Dans le listing, la croix ne ferme pas la fenêtre et ferme l'application complète si on insiste

Merci du partage 8)

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un repertoire ...
MessagePosté: Ven 08/Sep/2017 17:39 
En ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6553
Localisation: IDF (Yvelines)
Bienvenu Paul.

■ Je ne serais pas aussi gentil que mes camarades de jeux.
- Ton code souffre de plusieurs soucis de conception et ça se ressent. Il y a quelques bugues.
- La convivialité de ton application n'est pas au rendez vous .

■ Argumentation en vrac.
- Pourquoi décrire trois fenêtres pour la création, modification et consultation ? Une seule suffit.
- Cinq boucles événementielles WaitWindowEvent() ? Une seule suffisait.
- Quand tu es dans ton listing tu peux cliquer sur un espace sans nom et faire modification pour créer un nouveau contact.
- Fenêtre Modifier et Nouveau : Cliquez sur le bouton close ne fonctionne pas si tu clique ensuite sur Annuler la fenêtre ne se ferme pas.
- En création la touche Entrée pour passer de champ de saisie en champ de saisie c'est pas mal. On pourrait croire que sur le dernier champ de saisie, la touche entrée permet de revenir au premier et surprise : Reset du formulaire de saisie et enregistrement automatique de la saisie précédente. Ca peut surprendre quand on ne le sait pas.
- je ne comprends pas ces ProcedureReturn à la fin de la plupart de tes procédures. A mon avis tu pratiques un autre langage :wink:

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.45 LTS & PB 5.62
➽ Je papote aussi sur http://purebasic.chat & http://purebasic.chat/forum

➽ Restez informé Image Pure Basic Francophone Community

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne répond pas aux mp


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un repertoire ...
MessagePosté: Ven 08/Sep/2017 17:54 
En ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6553
Localisation: IDF (Yvelines)
Tu peux simplifié la procédure de sauvegarde/chargement de tes contacts avec les fonctionnalités JSON.
Code:
Procedure contact_chargement()
  If LoadJSON(0, filename$)
    ExtractJSONMap(JSONValue(0), Contact1())
  EndIf
EndProcedure

Procedure contact_sauvegarde()
  If CreateJSON(0)
    InsertJSONMap(JSONValue(0), Contact1())
    SaveJSON(0, filename$)
  EndIf
EndProcedure

Avantage: Tu peux modifier ta structure de map sans modifier tes procédures de sauvegarde/chargement de fichier.

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.45 LTS & PB 5.62
➽ Je papote aussi sur http://purebasic.chat & http://purebasic.chat/forum

➽ Restez informé Image Pure Basic Francophone Community

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne répond pas aux mp


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un repertoire ...
MessagePosté: Ven 08/Sep/2017 18:00 
Hors ligne

Inscription: Jeu 07/Sep/2017 20:36
Messages: 8
Merci de vous être donné la peine d'étudier mon travail, ça fait plaisir.
Je vais essayer d'apporter un correctif à mon programme en tenant compte de vos remarques et je reposterai une fois celui ci corrigé.
Commençons par diminuer le nombre de fenêtres ...


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un repertoire ...
MessagePosté: Ven 08/Sep/2017 20:29 
Hors ligne

Inscription: Jeu 07/Sep/2017 20:36
Messages: 8
Nouvelle mouture en tenant compte de vos remarques

Code:
;----------------------------------
;  Répertoire ...
;  Paul(PE)
;  08-09-2017
;-------------------------------


Declare contact_fenetre(Fen)
Declare contact_nouveau()
Declare quitter(Fen)
Declare contact_chargement()
Declare enregistrer_contact_nouveau()
Declare changement_dans_liste()
Declare touche_entree()
Declare contact_sauvegarde()
Declare contact_sel ()
Declare contact_supprimer ()
Declare contact_modification()


Enumeration Fenetres
  #Fenetre_Contact
  #Fenetre_Nouveau
  #Fenetre_Sel
EndEnumeration

Enumeration Gadgets 
  #Lib1
  #Bou_Contact_Nouveau
  #Bou_Contact_2
  #Bou_Contact_3
  #Bou_Contact_Fermer
  #Bou_Contact_5
  #Bou_Contact_6
  #Bou_listing
  #liste
  #Cont1
  #Calendrier
 
  #Nouveau_Nom
  #Nouveau_Prenom
  #Nouveau_Info1
  #Nouveau_Info2
  #Nouveau_Info3
  #Nouveau_Info4
  #Bou_Nouveau_enregistrer
  #Bou_Nouveau_sortir
 
  #Sel_Nom
  #Sel_Prenom
  #Sel_Info1
  #Sel_Info2
  #Sel_Info3
  #Sel_Info4
  #Bou_modifier_sel
  #Bou_supprimer_sel
  #Bou_sortir_sel
EndEnumeration

Enumeration
  #Filename
  #Return
EndEnumeration


Structure identite
  Nom$
  Prenom$
  Info1$
  Info2$
  Info3$
  Info4$
EndStructure

Global NewMap Contact1.identite()
Global n$, p$, v1$, v2$, v3$, v4$
Global selection$, filename$
filename$ = "repertoire1.txt"

Procedure quitter(Fen)
  CloseWindow(Fen)
  End
EndProcedure

Procedure contact_chargement()
  If LoadJSON(0, filename$)
    ExtractJSONMap(JSONValue(0), Contact1())
  EndIf
EndProcedure

Procedure contact_sauvegarde()
  If CreateJSON(0)
    InsertJSONMap(JSONValue(0), Contact1())
    SaveJSON(0, filename$)
  EndIf
EndProcedure

Procedure enregistrer_contact_nouveau()
  n$ = (GetGadgetText(#Nouveau_Nom))
  p$ = (GetGadgetText(#Nouveau_Prenom))
  v1$ = (GetGadgetText(#Nouveau_Info1))
  v2$ = (GetGadgetText(#Nouveau_Info2))
  v3$ = (GetGadgetText(#Nouveau_Info3))
  v4$ = (GetGadgetText(#Nouveau_Info4))
 
  SetGadgetText(#Nouveau_Nom, "")
  SetGadgetText(#Nouveau_Prenom, "")
  SetGadgetText(#Nouveau_Info1, "")
  SetGadgetText(#Nouveau_Info2, "")
  SetGadgetText(#Nouveau_Info3, "")
  SetGadgetText(#Nouveau_Info4, "")
 
  a$ = n$+" "+p$
 
  Contact1(a$)\Nom$ = n$
  Contact1(a$)\Prenom$ = p$
  Contact1(a$)\Info1$ = v1$
  Contact1(a$)\Info2$ = v2$
  Contact1(a$)\Info3$ = v3$
  Contact1(a$)\Info4$ = v4$
  SetActiveGadget(#Nouveau_Nom)
  contact_sauvegarde()
EndProcedure

Procedure contact_sel()
   CloseWindow(#Fenetre_Contact)
  If OpenWindow(#Fenetre_Sel, 480, 160, 250, 270, "Contact", #PB_Window_SystemMenu )

        StringGadget(#Sel_Nom, 10, 10, 230, 30, Contact1(selection$)\Nom$)
        StringGadget(#Sel_Prenom, 10, 40, 230, 30, Contact1(selection$)\Prenom$)
        StringGadget(#Sel_Info1, 10, 80, 230, 30, Contact1(selection$)\Info1$)
        StringGadget(#Sel_Info2, 10, 110, 230, 30, Contact1(selection$)\Info2$)
        StringGadget(#Sel_Info3, 10, 140, 230, 30, Contact1(selection$)\Info3$)
        StringGadget(#Sel_Info4, 10, 170, 230, 30, Contact1(selection$)\Info4$)
       
        ButtonGadget(#Bou_modifier_sel, 10, 210, 113, 20, "Modifier")
        ButtonGadget(#Bou_supprimer_sel, 125, 210, 113, 20, "Supprimer")
        ButtonGadget(#Bou_sortir_sel, 10, 240, 230, 20, "Sortir")       
     
        Repeat
          Event = WaitWindowEvent()
         
          Select Event       
            Case #PB_Event_Gadget
              Select EventGadget()
                  Case #Bou_modifier_sel
                    contact_modification()
                  Case #Bou_supprimer_sel
                    contact_supprimer()
                  Case #Bou_sortir_sel
                    contact_fenetre(#Fenetre_Sel)
              EndSelect
       
          EndSelect
        Until Event = #PB_Event_CloseWindow
      EndIf
EndProcedure
   

Procedure contact_modification() 
   DeleteMapElement(Contact1(), selection$)
   n$ = (GetGadgetText(#Sel_Nom))
   p$ = (GetGadgetText(#Sel_Prenom))
   v1$ = (GetGadgetText(#Sel_Info1))
   v2$ = (GetGadgetText(#Sel_Info2))
   v3$ = (GetGadgetText(#Sel_Info3))
   v4$ = (GetGadgetText(#Sel_Info4))
   
    a$ = n$+" "+p$
  Contact1(a$)\Nom$ = n$
  Contact1(a$)\Prenom$ = p$
  Contact1(a$)\Info1$ = v1$
  Contact1(a$)\Info2$ = v2$
  Contact1(a$)\Info3$ = v3$
  Contact1(a$)\Info4$ = v4$
 
  contact_sauvegarde()
  contact_fenetre(#Fenetre_Sel)
EndProcedure


Procedure contact_supprimer()
  DeleteMapElement(Contact1(), selection$)
  contact_sauvegarde()
  contact_fenetre(#Fenetre_Sel)
EndProcedure

Procedure changement_dans_liste()
  selection$ = (GetGadgetText(#liste))
  contact_sel()
EndProcedure

Procedure touche_entree()
   Nb.i = GetActiveGadget()
   Select Nb
     Case #Nouveau_Nom
       SetActiveGadget(#Nouveau_Prenom)
     Case #Nouveau_Prenom
       SetActiveGadget(#Nouveau_Info1)
     Case #Nouveau_Info1
       SetActiveGadget(#Nouveau_Info2)
     Case #Nouveau_Info2
       SetActiveGadget(#Nouveau_Info3)
     Case #Nouveau_Info3
       SetActiveGadget(#Nouveau_Info4)
     Case #Nouveau_Info4
       SetActiveGadget(#Nouveau_Nom)     
  EndSelect   
EndProcedure

Procedure contact_nouveau()
  CloseWindow(#Fenetre_Contact)
  If OpenWindow(#Fenetre_Nouveau, 480, 160, 250, 250, "Nouveau Contact", #PB_Window_SystemMenu )

        StringGadget(#Nouveau_Nom, 10, 10, 230, 30, "Nom")
        StringGadget(#Nouveau_Prenom, 10, 40, 230, 30, "Prenom")
        StringGadget(#Nouveau_Info1, 10, 80, 230, 30, "Info1")
        StringGadget(#Nouveau_Info2, 10, 110, 230, 30, "Info2")
        StringGadget(#Nouveau_Info3, 10, 140, 230, 30, "Info3")
        StringGadget(#Nouveau_Info4, 10, 170, 230, 30, "Info4")
        ButtonGadget(#Bou_Nouveau_enregistrer, 10, 210, 112, 20, "Enregistrer")
        ButtonGadget(#Bou_Nouveau_sortir, 127, 210, 112, 20, "Retour")
       
        AddKeyboardShortcut(#Fenetre_Nouveau, #PB_Shortcut_Return, #Return)       
        SetActiveGadget(#Nouveau_Nom)
     
        Repeat
          Event = WaitWindowEvent()
       
          Select Event       
            Case #PB_Event_Gadget
              Select EventGadget()
                  Case #Bou_Nouveau_enregistrer
                    enregistrer_contact_nouveau()
                  Case #Bou_Nouveau_sortir
                    contact_fenetre(#Fenetre_Nouveau)
              EndSelect
               
           Case #PB_Event_Menu
              Select EventMenu()
                  Case #Return
                    touche_entree()
              EndSelect               
       EndSelect
     Until Event = #PB_Event_CloseWindow
   EndIf
EndProcedure

Procedure contact_fenetre(Fen)
  CloseWindow(Fen)
  contact_chargement()
  colorContact = $87C1A3
  test.i = 0
    If OpenWindow(#Fenetre_Contact, 380, 160, 510, 400, "Contacts", #PB_Window_SystemMenu )
      If LoadFont(0, "Arial", 13)
        SetGadgetFont(#PB_Default, FontID(0))   ; la police par défaut est remplacée par celle chargée (Arial 16)
      EndIf
      TextGadget(#Lib1, 180, 10,127,20,"    CONTACTS   ",#PB_Text_Center | #PB_Text_Border)
      SetGadgetColor(#Lib1, #PB_Gadget_BackColor, colorContact)
      SetGadgetFont(#PB_Default, #PB_Default)  ; remet la police par défaut originale (standard)
      ButtonGadget(#Bou_Contact_Nouveau, 10, 45, 130, 30, "Nouveau")
      ButtonGadget(#Bou_Contact_2, 10, 77, 130, 30, "")
      ButtonGadget(#Bou_Contact_3, 10, 110, 130, 30, "")
     
      ButtonGadget(#Bou_Contact_Fermer, 355, 45, 130, 30, "Fermer")
      ButtonGadget(#Bou_Contact_5, 355, 77, 130, 30, "")
      ButtonGadget(#Bou_Contact_6, 355, 110, 130, 30, "")
     
      ContainerGadget(#Cont1, 50, 150, 400, 30, #PB_Container_Double)
      SetGadgetColor(#Cont1, #PB_Gadget_BackColor, colorContact)
      CloseGadgetList()
     
      ButtonGadget(#Bou_listing, 150, 45, 195, 30, "Listing")
     
      ;---------------Liste ---------
     
      ListViewGadget(#liste,162,75,175,100)
      HideGadget(#liste,1)
          NewList listing1.s()
          ForEach Contact1()
             AddElement(listing1())
             listing1() = (MapKey (Contact1()))
          Next   
          SortList( listing1(), #PB_Sort_Ascending )
     
          ForEach listing1()
             AddGadgetItem(#liste, -1, listing1())
           Next
          
        ;--------------------------------
         
      CalendarGadget(#Calendrier, 100, 190, 300, 170)
   
      Repeat       
        Event = WaitWindowEvent()       
        Select Event
          Case #PB_Event_Gadget
           
              Select EventGadget()                 
                   
                  Case #Bou_listing
                      If test = 0
                             HideGadget(#liste,0)
                             test = 1
                           Else
                             HideGadget(#liste,1)
                             test = 0
                           EndIf
                          
                  Case #Bou_Contact_Nouveau
                    contact_nouveau()
                   
                  Case #Bou_Contact_Fermer
                    quitter(#Fenetre_Contact)
                   
                  Case #liste
                      Select EventType()           
                              Case #PB_EventType_LeftClick 
                                 changement_dans_liste()
                           EndSelect                  
              EndSelect
       EndSelect       
     Until Event = #PB_Event_CloseWindow     
  EndIf
EndProcedure

contact_fenetre(-1)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un repertoire ...
MessagePosté: Ven 08/Sep/2017 21:54 
En ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6553
Localisation: IDF (Yvelines)
Il y a du mieux bravo :)

Par contre :
- Il y a encore 2 boucles evenementielles WaitWindowEvent()
- Ce bloc d'instruction se répete deux fois
Code:
n$ = (GetGadgetText(#Contact_Nom))
      p$ = (GetGadgetText(#Contact_Prenom))
      v1$ = (GetGadgetText(#Contact_Info1))
      v2$ = (GetGadgetText(#Contact_Info2))
      v3$ = (GetGadgetText(#Contact_Info3))
      v4$ = (GetGadgetText(#Contact_Info4))
     
      a$ = n$+" "+p$
     
      Contact1(a$)\Nom$ = n$
      Contact1(a$)\Prenom$ = p$
      Contact1(a$)\Info1$ = v1$
      Contact1(a$)\Info2$ = v2$
      Contact1(a$)\Info3$ = v3$
      Contact1(a$)\Info4$ = v4$
Etant donné que tu sauvegardes à chaque création/modification/suppression, je pense qu'il faudrait intégrer ce bloc d'instruction dans la procédure de sauvegarde.

- Tu as aussi des identifiants redondants #Nouveau_Nom ou #Sel_Nom par exemple c'est la même chose. Idem pour le groupe [#Nouveau_Prenom, #Nouveau_Info1, #Nouveau_Info2, #Nouveau_Info3, #Nouveau_Info4] qui est identique au groupe [#Sel_Prenom, #Sel_Info1, #Sel_Info2, #Sel_Info3, #Sel_Info4]

En tenant compte de ces remarque et de la philosophie dans ta façon de coder, je te propose une première correction de ton code.
Code:
;----------------------------------
;  Répertoire ...
;  Paul(PE)
;  08-09-2017
;-------------------------------


Declare contact_fenetre(Fen)
Declare contact_nouveau()
Declare quitter(Fen)
Declare contact_chargement()
Declare enregistrer_contact_nouveau()
Declare changement_dans_liste()
Declare touche_entree()
Declare contact_sauvegarde(Mode)
Declare contact_sel ()
Declare contact_supprimer ()
Declare contact_modification()


Enumeration Fenetres
  #Fenetre_Contact
  #Fenetre_Nouveau
  #Fenetre_Sel
EndEnumeration

Enumeration Gadgets 
  #Lib1
  #Bou_Contact_Nouveau
  #Bou_Contact_2
  #Bou_Contact_3
  #Bou_Contact_Fermer
  #Bou_Contact_5
  #Bou_Contact_6
  #Bou_listing
  #liste
  #Cont1
  #Calendrier
 
  #Contact_Nom
  #Contact_Prenom
  #Contact_Info1
  #Contact_Info2
  #Contact_Info3
 
  #Contact_Info4
  #Bou_Nouveau_enregistrer
  #Bou_Nouveau_sortir 
  #Bou_modifier_sel
  #Bou_supprimer_sel
  #Bou_sortir_sel
EndEnumeration

Enumeration
  #Filename
  #Return
EndEnumeration

Structure identite
  Nom$
  Prenom$
  Info1$
  Info2$
  Info3$
  Info4$
EndStructure

Global NewMap Contact1.identite()
Global n$, p$, v1$, v2$, v3$, v4$
Global selection$, filename$, HideList.b
filename$ = "repertoire1.txt"

Procedure quitter(Fen)
  CloseWindow(Fen)
  End
EndProcedure

Procedure contact_chargement()
  If LoadJSON(0, filename$)
    ExtractJSONMap(JSONValue(0), Contact1())
  EndIf
EndProcedure

Procedure contact_sauvegarde(Mode)
  ; Mode
  ; 1 Creation
  ; 2 Modification
  ; 3 Suppression
  Select Mode
    Case 1, 2
      If mode = 2
        DeleteMapElement(Contact1(), selection$)
      EndIf
     
      n$ = (GetGadgetText(#Contact_Nom))
      p$ = (GetGadgetText(#Contact_Prenom))
      v1$ = (GetGadgetText(#Contact_Info1))
      v2$ = (GetGadgetText(#Contact_Info2))
      v3$ = (GetGadgetText(#Contact_Info3))
      v4$ = (GetGadgetText(#Contact_Info4))
     
      a$ = n$+" "+p$
     
      Contact1(a$)\Nom$ = n$
      Contact1(a$)\Prenom$ = p$
      Contact1(a$)\Info1$ = v1$
      Contact1(a$)\Info2$ = v2$
      Contact1(a$)\Info3$ = v3$
      Contact1(a$)\Info4$ = v4$
    Case 3
      DeleteMapElement(Contact1(), selection$)     
  EndSelect
 
  If CreateJSON(0)
    InsertJSONMap(JSONValue(0), Contact1())
    SaveJSON(0, filename$)
  EndIf
EndProcedure

Procedure enregistrer_contact_nouveau() 
  contact_sauvegarde(1) 
  SetGadgetText(#Contact_Nom, "")
  SetGadgetText(#Contact_Prenom, "")
  SetGadgetText(#Contact_Info1, "")
  SetGadgetText(#Contact_Info2, "")
  SetGadgetText(#Contact_Info3, "")
  SetGadgetText(#Contact_Info4, "")
  SetActiveGadget(#Contact_Nom)
EndProcedure

Procedure contact_sel()
  CloseWindow(#Fenetre_Contact)
  If OpenWindow(#Fenetre_Sel, 480, 160, 250, 270, "Contact", #PB_Window_SystemMenu )
    StringGadget(#Contact_Nom, 10, 10, 230, 30, Contact1(selection$)\Nom$)
    StringGadget(#Contact_Prenom, 10, 40, 230, 30, Contact1(selection$)\Prenom$)
    StringGadget(#Contact_Info1, 10, 80, 230, 30, Contact1(selection$)\Info1$)
    StringGadget(#Contact_Info2, 10, 110, 230, 30, Contact1(selection$)\Info2$)
    StringGadget(#Contact_Info3, 10, 140, 230, 30, Contact1(selection$)\Info3$)
    StringGadget(#Contact_Info4, 10, 170, 230, 30, Contact1(selection$)\Info4$)
   
    ButtonGadget(#Bou_modifier_sel, 10, 210, 113, 20, "Modifier")
    ButtonGadget(#Bou_supprimer_sel, 125, 210, 113, 20, "Supprimer")
    ButtonGadget(#Bou_sortir_sel, 10, 240, 230, 20, "Sortir")           
  EndIf
EndProcedure

Procedure contact_modification()   
  contact_sauvegarde(2)
  contact_fenetre(#Fenetre_Sel)
EndProcedure

Procedure contact_supprimer()
  DeleteMapElement(Contact1(), selection$)
  contact_sauvegarde(3)
  contact_fenetre(#Fenetre_Sel)
EndProcedure

Procedure changement_dans_liste()
  selection$ = (GetGadgetText(#liste))
  HideList = 0
  contact_sel()
EndProcedure

Procedure touche_entree()
  Nb.i = GetActiveGadget()
  Select Nb
    Case #Contact_Nom
      SetActiveGadget(#Contact_Prenom)
    Case #Contact_Prenom
      SetActiveGadget(#Contact_Info1)
    Case #Contact_Info1
      SetActiveGadget(#Contact_Info2)
    Case #Contact_Info2
      SetActiveGadget(#Contact_Info3)
    Case #Contact_Info3
      SetActiveGadget(#Contact_Info4)
    Case #Contact_Info4
      SetActiveGadget(#Contact_Nom)     
  EndSelect   
EndProcedure

Procedure contact_nouveau()
  CloseWindow(#Fenetre_Contact)
  If OpenWindow(#Fenetre_Nouveau, 480, 160, 250, 250, "Nouveau Contact", #PB_Window_SystemMenu )
   
    StringGadget(#Contact_Nom, 10, 10, 230, 30, "Nom")
    StringGadget(#Contact_Prenom, 10, 40, 230, 30, "Prenom")
    StringGadget(#Contact_Info1, 10, 80, 230, 30, "Info1")
    StringGadget(#Contact_Info2, 10, 110, 230, 30, "Info2")
    StringGadget(#Contact_Info3, 10, 140, 230, 30, "Info3")
    StringGadget(#Contact_Info4, 10, 170, 230, 30, "Info4")
    ButtonGadget(#Bou_Nouveau_enregistrer, 10, 210, 112, 20, "Enregistrer")
    ButtonGadget(#Bou_Nouveau_sortir, 127, 210, 112, 20, "Retour")
   
    AddKeyboardShortcut(#Fenetre_Nouveau, #PB_Shortcut_Return, #Return)       
    SetActiveGadget(#Contact_Nom)
  EndIf
EndProcedure

Procedure contact_fenetre(Fen)
  CloseWindow(Fen)
  contact_chargement()
  colorContact = $87C1A3
  If OpenWindow(#Fenetre_Contact, 380, 160, 510, 400, "Contacts", #PB_Window_SystemMenu )
    If LoadFont(0, "Arial", 13)
      SetGadgetFont(#PB_Default, FontID(0))   ; la police par défaut est remplacée par celle chargée (Arial 16)
    EndIf
    TextGadget(#Lib1, 180, 10,127,20,"    CONTACTS   ",#PB_Text_Center | #PB_Text_Border)
    SetGadgetColor(#Lib1, #PB_Gadget_BackColor, colorContact)
    SetGadgetFont(#PB_Default, #PB_Default)  ; remet la police par défaut originale (standard)
    ButtonGadget(#Bou_Contact_Nouveau, 10, 45, 130, 30, "Nouveau")
    ButtonGadget(#Bou_Contact_2, 10, 77, 130, 30, "")
    ButtonGadget(#Bou_Contact_3, 10, 110, 130, 30, "")
   
    ButtonGadget(#Bou_Contact_Fermer, 355, 45, 130, 30, "Fermer")
    ButtonGadget(#Bou_Contact_5, 355, 77, 130, 30, "")
    ButtonGadget(#Bou_Contact_6, 355, 110, 130, 30, "")
   
    ContainerGadget(#Cont1, 50, 150, 400, 30, #PB_Container_Double)
    SetGadgetColor(#Cont1, #PB_Gadget_BackColor, colorContact)
    CloseGadgetList()
   
    ButtonGadget(#Bou_listing, 150, 45, 195, 30, "Listing")
   
    ;---------------Liste ---------
   
    ListViewGadget(#liste,162,75,175,100)
    HideGadget(#liste,1)
    NewList listing1.s()
    ForEach Contact1()
      AddElement(listing1())
      listing1() = (MapKey (Contact1()))
    Next   
    SortList( listing1(), #PB_Sort_Ascending )
   
    ForEach listing1()
      AddGadgetItem(#liste, -1, listing1())
    Next
   
    ;--------------------------------
   
    CalendarGadget(#Calendrier, 100, 190, 300, 170) 
  EndIf
EndProcedure

contact_fenetre(-1)

;Une seule boucle evenementielle
Repeat       
  Event = WaitWindowEvent()       
  Select Event
     
    Case #PB_Event_Gadget ;Evenemeent Gadgets         
      Select EventGadget()                 
        Case #Bou_listing
          If HideList = 0
            HideGadget(#liste,0)
            HideList = 1
          Else
            HideGadget(#liste,1)
            HideList = 0
          EndIf
         
        Case #Bou_Contact_Nouveau
          contact_nouveau()
         
        Case #Bou_Contact_Fermer
          quitter(#Fenetre_Contact)
         
        Case #liste
          Select EventType()           
            Case #PB_EventType_LeftClick 
              changement_dans_liste()
          EndSelect   
         
        Case #Bou_modifier_sel
          contact_modification()
         
        Case #Bou_supprimer_sel
          contact_supprimer()
         
        Case #Bou_Nouveau_enregistrer
          enregistrer_contact_nouveau()
         
        Case #Bou_Nouveau_sortir
          contact_fenetre(#Fenetre_Nouveau)
         
        Case #Bou_sortir_sel
          contact_fenetre(#Fenetre_Sel)             
      EndSelect
     
    Case #PB_Event_CloseWindow ;Evenements Fenetres
      Select EventWindow()
        Case #Fenetre_Contact
          End
         
        Case #Fenetre_Nouveau
          CloseWindow(#Fenetre_Nouveau)
          contact_fenetre(-1)
         
        Case #Fenetre_Sel
          CloseWindow(#Fenetre_Sel)
          contact_fenetre(-1)
      EndSelect
     
  EndSelect
ForEver

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.45 LTS & PB 5.62
➽ Je papote aussi sur http://purebasic.chat & http://purebasic.chat/forum

➽ Restez informé Image Pure Basic Francophone Community

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne répond pas aux mp


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un repertoire ...
MessagePosté: Sam 09/Sep/2017 9:55 
Hors ligne

Inscription: Jeu 07/Sep/2017 20:36
Messages: 8
Merci à Falsam pour la réponse pratique qu'il a fournie au problème qu'il avait soulevé, ainsi que Marc56 et KCC d'ailleurs, autour de la boucle évenementielle. Cela m'a permis de comprendre et ... de pouvoir y remédier.
J'ignorais qu'il était possible d'extraire la boucle évenementielle du "if" de la fenêtre et par delà ... de n'en créer qu'une pour toute les fenêtres.
Encore merci à tous.


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 10 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye