Page 1 sur 1
une structure dans une liste
Publié : mar. 01/mai/2007 14:49
par lepiaf31
salut je n'arrive pas a mettre une structure dans une liste:
Code : Tout sélectionner
Structure Fichier
Name.s
Type.c
Size.f
EndStructure
a.Fichier
a\Name = "test"
a\Type = 1
a\Size = 19
NewList Liste.Fichier()
AddElement(Liste())
Liste() = a
j'ai une erreure: "can't assign a value to a structure"
Publié : mar. 01/mai/2007 15:20
par minirop
il faut faire membres à membres :
Code : Tout sélectionner
Structure Fichier
Name.s
Type.c
Size.f
EndStructure
NewList Liste.Fichier()
AddElement(Liste())
Liste()\Name = "test"
Liste()\Type = 1
Liste()\Size = 19
Publié : mar. 01/mai/2007 15:38
par Gratteur
Ou pour copier a rapidement dans l'élément courant de la liste (ça peut etre chiant de tout faire membre à membre) :
Code : Tout sélectionner
Structure Fichier
Name.s
Type.c
Size.f
EndStructure
a.Fichier
a\Name = "test"
a\Type = 1
a\Size = 19
NewList Liste.Fichier()
AddElement(Liste())
CopyMemory(@a, Liste(), SizeOf(Fichier))
Debug Liste()\Name
Debug Liste()\Type
Debug Liste()\Size
Publié : mar. 01/mai/2007 17:57
par Guimauve
Gratteur a écrit :Ou pour copier a rapidement dans l'élément courant de la liste (ça peut etre chiant de tout faire membre à membre) :
Code : Tout sélectionner
Structure Fichier
Name.s
Type.c
Size.f
EndStructure
a.Fichier
a\Name = "test"
a\Type = 1
a\Size = 19
NewList Liste.Fichier()
AddElement(Liste())
CopyMemory(@a, Liste(), SizeOf(Fichier))
Debug Liste()\Name
Debug Liste()\Type
Debug Liste()\Size
Étant donnée la chaîne de caractère (champs Name) un CopyMemory() va simplement copier le pointeur de la chaîne et non le data de la chaîne.
J'ai pas de code de démonstration mais je sais par expérience que les modifications faites dans la variable 'a' aura le même effet sur l'élément courant de la 'Liste()' au moment de l'appel de la commande CopyMemory(). Je ne suis pas sûr mais si la variable a est local dans une procédure je pense que le champ Name dans la liste deviendra null.
Le code de minirop est le meilleur moyen pour initialiser l'élément d'une liste chaînée.
A+
Guimauve
Publié : mar. 01/mai/2007 20:35
par Jacobus
Exemple pour passer le contenu de plusieurs strings dans une listicon en les classant dans l'ordre en passant par une structure. (extrait d'un de mes codes sans détails)
Code : Tout sélectionner
;-structure htaccess
Structure ht_access
NomAcc.s
AdresseAcc.s
TelAcc.s
EmailAcc.s
RepAcc.s
FileAcc.s
IdAcc.s
PassAcc.s
EndStructure
Global NewList ItemsAc.ht_access()
;-clearlist
Procedure.b item_clearAc()
ClearList(ItemsAc())
ProcedureReturn 1
EndProcedure
Procedure.b AddItem_Access()
If AddElement(ItemsAc())
ItemsAc()\NomAcc = GetGadgetText(#String_NomAcc)
ItemsAc()\TelAcc = GetGadgetText(#String_TelAcc)
ItemsAc()\AdresseAcc= GetGadgetText(#String_AdresseAcc)
ItemsAc()\EmailAcc = GetGadgetText(#String_EmailAcc)
ItemsAc()\RepAcc = GetGadgetText(#String_RepAcc)
ItemsAc()\FileAcc = GetGadgetText(#String_FileAcc)
ItemsAc()\IdAcc = GetGadgetText(#String_IdAcc)
ItemsAc()\PassAcc = GetGadgetText(#String_PassAcc)
AddGadgetItem(#ListIcon_Acc, -1,ItemsAc()\NomAcc +Chr(10)+ ItemsAc()\TelAcc +Chr(10)+ItemsAc()\AdresseAcc +Chr(10)+ ItemsAc()\EmailAcc +Chr(10)+ ItemsAc()\RepAcc +Chr(10)+ItemsAc()\FileAcc+Chr(10)+ItemsAc()\IdAcc+Chr(10)+ItemsAc()\PassAcc)
EndIf
ProcedureReturn 1
EndProcedure