[OK] Passage données tableau structuré en procedure
Publié : mar. 03/mars/2015 7:17
Salut,
Je ne pige pas pourquoi la procédure RempliChamp() renvoie seulement les données du dernier élément du tableau.
Je m'arrache les cheveux depuis 3 jours.
Avec un code simple du genre ça marche
Mais dans mon code avec plusieurs champs ça foire.
Pour tester.
1 - Cliquer sur un client autre que le dernier
2 - Cliquer sur Modifier
Vous verrez que les champs se remplissent toujours avec les données du dernier.
Peut être un array à mettre quelque part mais là ça me pompe. Je suis sûr que c'est pas grand chose en plus.
Le fichier prefs
Le fichier prefs doit être un fichier texte nommé clients.ldv dans le repertoire du code avec comme contenu
Merci pour votre aide
Je ne pige pas pourquoi la procédure RempliChamp() renvoie seulement les données du dernier élément du tableau.
Je m'arrache les cheveux depuis 3 jours.
Avec un code simple du genre ça marche
Code : Tout sélectionner
Structure Client
Nom.s
EndStructure
Global Dim Client.Client(2)
Client(0)\Nom = "AAA"
Client(1)\Nom = "BBB"
Client(2)\Nom = "CCC"
Procedure.s RempliChamp(NumeroElement)
ProcedureReturn Client(NumeroElement)\Nom
EndProcedure
Debug RempliChamp (1)
Pour tester.
1 - Cliquer sur un client autre que le dernier
2 - Cliquer sur Modifier
Vous verrez que les champs se remplissent toujours avec les données du dernier.
Peut être un array à mettre quelque part mais là ça me pompe. Je suis sûr que c'est pas grand chose en plus.
Le fichier prefs
Le fichier prefs doit être un fichier texte nommé clients.ldv dans le repertoire du code avec comme contenu
casimir;8 place des nuages 38690 l'ile aux enfants;0606060606;casim@ir.fr;03/2015;60;0;60
toto;11 ch des blagouses 38690 Châbons;0606060606;toto@free.fr;03/2015;60;0;60
popeye;247 chemins des épinards 38690 Bizonnes;0404040404;popop@orange.fr;03/2015;60;0;60
Code : Tout sélectionner
; Gestionnaire de client Team Viewer
; Par Ar-S
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;- INITIALISATION
; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Enumeration
#LDVM
#PREF
#BT_ADD
#BT_MOD
#BT_SUPPR
#AFF
#BT_TV
#BT_VALID
#BT_ANNULER
#Panel
#ListClient
#TXT_NOM
#TXT_ADRESSE
#TXT_TEL
#TXT_MEL
#TXT_DATEHA
#TXT_MIN
#S_NOM
#S_ADRESSE
#S_TEL
#S_MEL
#S_DATEHA
#S_MIN
EndEnumeration
Macro G: Global : EndMacro
G Element
G.s ChemFichier = GetCurrentDirectory()+"clients.ldv"
G.i NbrClients
G.b ETAT_PANEL, Quit
G NewList CL.s()
G NewList CLfull.s()
#PANEL0 = 0
#PANEL1 = 1
#ADDCLIENT = 2
#MODCLIENT = 3
Quit = 0
ETAT_PANEL = #PANEL0
Debug ChemFichier
Structure Client
Nom.s
Adresse.s
Tel.s
Mel.s
DateHA.s
Min.i
MinUtil.i
MinRest.i
EndStructure
G Dim Client.Client(0)
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;- PROCEDURES
; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Procedure Open_LDVM()
If OpenWindow(#LDVM, 390, 44, 615, 601, "CLIENT MANAGER", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
ButtonGadget(#BT_ADD, 0, 550, 125, 50, "AJOUTER")
ButtonGadget(#BT_MOD, 130, 550, 125, 50, "MODIFIER")
ButtonGadget(#BT_SUPPR, 260, 550, 125, 50, "SUPPRIMER")
StringGadget(#AFF, 388, 578, 223, 20, "", #PB_String_ReadOnly)
ButtonGadget(#BT_TV, 388, 550, 223, 25, "Copier l'adresse du client team viewer")
PanelGadget(#Panel, 0, 0, 613, 546)
; Clients
AddGadgetItem(#Panel, -1, "Clients")
ListIconGadget(#ListClient, 1, 1, 604, 518, "Client", 475, #PB_ListIcon_FullRowSelect)
AddGadgetItem(#Panel, -1, "Ajout/Modification de client")
TextGadget(#TXT_NOM,1,20,150,20,"NOM")
StringGadget(#S_NOM,160,20,250,20,"")
TextGadget(#TXT_ADRESSE,1,50,150,20,"ADRESSE")
StringGadget(#S_ADRESSE,160,50,250,20,"")
TextGadget(#TXT_TEL,1,80,150,20,"TELEPHONE")
StringGadget(#S_TEL,160,80,250,20,"")
TextGadget(#TXT_MEL,1,110,150,20,"E-MAIL")
StringGadget(#S_MEL,160,110,250,20,"")
TextGadget(#TXT_DATEHA,1,140,150,20,"DATE D'ACHAT")
StringGadget(#S_DATEHA,160,140,250,20,"")
TextGadget(#TXT_MIN,1,170,150,20,"MINUTES")
StringGadget(#S_MIN,160,170,250,20,"")
ButtonGadget(#BT_VALID,1,200,603,50,"VALIDER")
ButtonGadget(#BT_ANNULER,1,252,603,50,"ANNULER")
CloseGadgetList()
DisableGadget(#BT_MOD,1)
DisableGadget(#BT_SUPPR,1)
Else
End
EndIf
EndProcedure
Procedure.i IsPref(fichierPref.s)
If FileSize(fichierPref.s) > 0
Debug "Fichier present"
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure.i CompteClient()
If IsPref(ChemFichier.s) = 1
Compteur = 0
ReadFile(#Pref, ChemFichier.s)
While Eof(#Pref) = 0
ReadString(#Pref)
Compteur+1
Wend
CloseFile(#Pref)
ProcedureReturn Compteur
EndIf
EndProcedure
Procedure LisPref()
ReadFile(#Pref, ChemFichier.s)
While Eof(#Pref) = 0
; Stockage des infos dans le tableau structuré ET creation de la liste avec simplement les Noms pour un affichage plus simple
; Le fichier pref est sous la forme : NomClient;AdresseClient;0404040404;mail@mail.com;date d'achat;60
ligne$ = ReadString(#pref)
AddElement (CLfull())
CLfull() = ligne$
AddElement (CL())
For i = 0 To NbrClients-1
Client(i)\Nom = StringField(ligne$, 1, ";")
CL() = Client(i)\Nom
Client(i)\Adresse = StringField(ligne$, 2, ";")
Client(i)\Tel = StringField(ligne$, 3, ";")
Client(i)\Mel = StringField(ligne$, 4, ";")
Client(i)\DateHA = StringField(ligne$, 5, ";")
Client(i)\Min = Val(StringField(ligne$, 6, ";"))
Client(i)\MinUtil = Val(StringField(ligne$, 7, ";"))
Client(i)\MinRest = Client(i)\Min - Client(i)\MinUtil
Next
Wend
CloseFile(#Pref)
EndProcedure
Procedure Initialisation()
NbrClients = CompteClient()
ReDim Client(NbrClients-1)
EndProcedure
Procedure AffichClient()
ForEach CL()
AddGadgetItem(#ListClient, ListIndex(CL() ), CL())
Next
EndProcedure
Procedure AddClient()
Debug "j'ajoute !"
EndProcedure
Procedure ModClient()
Debug "Je modifie !"
EndProcedure
Procedure DelClient()
Debug "J'efface !"
EndProcedure
Procedure SavePref()
If ListSize(CLfull()) > 0
; RenameFile( ChemFichier.s,ChemFichier.s+".bak")
;; OpenFile(#Pref, ChemFichier.s)
Debug "Simulation de la Sauvegarde"
ForEach CLfull()
Debug CLfull()
; WriteStringN(#PREF,CLfull())
Next
; CloseFile(#Pref)
EndIf
EndProcedure
Procedure.s RempliChamp(NumeroElement)
Debug "Nom : " + Client(NumeroElement)\Nom + " Numéro : " + NumeroElement
Debug Client(5)\Nom
SetGadgetText(#S_NOM, Client(NumeroElement)\Nom)
SetGadgetText(#S_ADRESSE, Client(NumeroElement)\Adresse)
SetGadgetText(#S_TEL, Client(NumeroElement)\Tel)
SetGadgetText(#S_MEL, Client(NumeroElement)\Mel)
SetGadgetText(#S_DATEHA, Client(NumeroElement)\DateHA)
SetGadgetText(#S_MIN, Str(Client(NumeroElement)\Min))
EndProcedure
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;- PROGRAMME
; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Initialisation()
LisPref()
Open_LDVM()
AffichClient()
SavePref()
Repeat
Select WaitWindowEvent()
; ///////////////////
Case #PB_Event_Gadget
Select EventGadget()
Case #BT_ANNULER
SetGadgetState(#Panel,0)
ETAT_PANEL = #PANEL0
DisableGadget(#BT_SUPPR,0)
DisableGadget(#BT_ADD,0)
DisableGadget(#BT_MOD,0)
;- Ouverture panel pour AJOUTER un client
Case #BT_ADD
SetGadgetState(#Panel,1)
ETAT_PANEL = #ADDCLIENT
For i = #S_NOM To #S_MIN
SetGadgetText(i,"")
Next
DisableGadget(#BT_SUPPR,1)
DisableGadget(#BT_ADD,1)
DisableGadget(#BT_MOD,1)
;- Ouverture panel pour MODIFIER un client
Case #BT_MOD
ETAT_PANEL = #MODCLIENT
SetGadgetState(#Panel,1)
DisableGadget(#BT_SUPPR,1)
DisableGadget(#BT_ADD,1)
DisableGadget(#BT_MOD,1)
Case #BT_SUPPR
Case #AFF
;- VALIDER AJOUT ou MODIFICATION client
Case #BT_VALID
If ETAT_PANEL = #ADDCLIENT
AddClient()
ElseIf ETAT_PANEL = #MODCLIENT
ModClient()
EndIf
Case #BT_TV
;- / Panel
Case #Panel
Select EventType()
Case #PB_EventType_Change
NumPanel = GetGadgetState(#Panel)
If NumPanel = 1 And ETAT_PANEL = #PANEL0
SetGadgetState(#Panel,0)
MessageRequester("Information","Vous devez choisir de modifier/ajouter un contacte pour accéder à cet onglet",#PB_MessageRequester_Ok|#MB_ICONINFORMATION)
ElseIf ETAT_PANEL = #PANEL1 Or ETAT_PANEL = #ADDCLIENT Or ETAT_PANEL = #MODCLIENT
SetGadgetState(#Panel,1)
MessageRequester("Information","Vous devez valider ou annuler l'opération en cours",#PB_MessageRequester_Ok|#MB_ICONINFORMATION)
EndIf
EndSelect
;- / ListClient
Case #ListClient
Select EventType()
Case #PB_EventType_LeftClick
Element = GetGadgetState(#ListClient)
If Element > -1
SelectElement(CL(),Element)
Debug Element
RempliChamp(Element)
SetGadgetText (#aff, CL() )
DisableGadget(#BT_MOD,0)
DisableGadget(#BT_SUPPR,0)
Else
SetGadgetText (#aff, "" )
DisableGadget(#BT_MOD,1)
DisableGadget(#BT_SUPPR,1)
EndIf
EndSelect
EndSelect
; ////////////////////////
Case #PB_Event_CloseWindow
Select EventWindow()
Case #LDVM
Quit = 1
EndSelect
EndSelect
Until Quit = 1
SavePref()
CloseWindow(#LDVM)
End