retaks666
Messages postés286Date d'inscriptionjeudi 2 janvier 2003StatutMembreDernière intervention16 juillet 2007
-
22 févr. 2005 à 14:12
cs_neko
Messages postés135Date d'inscriptionjeudi 14 août 2003StatutMembreDernière intervention12 octobre 2006
-
24 févr. 2005 à 08:41
bonjour ,j'ai cré un type de cette manière :
type
TDomCI = record
Nom: string[100];
Centres: tstrings;
end;
TDomFile = file of TDomCI;
//une variable
domaines : array of TDomCI;
et je n'arrives pas a accéder au centres, quand je lis un fichier.
par exemple j'ai fait ça:
procedure TFrmAddCI.loaddom;
var
Fichier: TDomFile;
ChemFich : string;
i:integer;
begin
lstdom.items.clear;
setlength(domaines,0);
chemfich := extractfilepath(application.ExeName)+'dom.dat';
//showmessage(chemfich);
AssignFile(Fichier,chemfich);
if FileExists(chemfich) then
Reset(Fichier)
else
Rewrite(Fichier);
Seek(Fichier, 0);
while not Eof(Fichier) do
begin
setlength(domaines,length(domaines)+1);
domaines[length(domaines)-1].Centres := tstringlist.Create;
Read(Fichier, domaines[length(domaines)-1]);
end;
CloseFile(Fichier);
for i := 0 to length(domaines)-1 do
lstdom.AddItem(domaines[i].Nom,self);
end;
et si j'éssaie d'accéder aux données 'centres' j'ai une erreur mémoire!
lstci est la liste contenant la propriété centres
lstdom est la liste contenant la propriété nom du type
par exemple, j'ai deux list, je veux que l'une contienne les propriétés
nom du type, et que quand je cliques il chage la stringliste de cet
item dans l'autre liste.
j'ai fait ce code la:
procedure TFrmAddCI.LstDomClick(Sender: TObject);
begin
if (domaines[lstdom.ItemIndex].Centres.Count > 0) then
lstCI.Items := domaines[lstdom.ItemIndex].Centres;
end;
Merci de m'aider :D parce que la je sèche vraiment
cs_neko
Messages postés135Date d'inscriptionjeudi 14 août 2003StatutMembreDernière intervention12 octobre 20061 24 févr. 2005 à 08:41
Bon, alors en delphi toutes variables les objets sont des pointeurs,
Or TStrings est une classe, ( donc centres un Objet ) donc tu stock dans ton fichier le pointeur, mais pas l'objet en lui même. Si tu etteind ton programme et que tu le ralume, l'objet en lui même n'est plus créé et le pointeur pointe sur... rien ^^ d'où l'erreur de memoire.
Ca c'est pour la premiere erreur ^^
while not Eof(Fichier) do begin setlength(domaines,length(domaines)+1);
domaines[length(domaines)-1].Centres := tstringlist.Create;
Read(Fichier, domaines[length(domaines)-1]);
end ;