Problème stringlist

retaks666 Messages postés 286 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 16 juillet 2007 - 22 févr. 2005 à 14:12
cs_neko Messages postés 135 Date d'inscription jeudi 14 août 2003 Statut Membre Dernière intervention 12 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

1 réponse

cs_neko Messages postés 135 Date d'inscription jeudi 14 août 2003 Statut Membre Dernière intervention 12 octobre 2006 1
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 ;

domaines[length(domaines)-1].Centres : = tstringlist.Create;

Ici tu créer ton objet Centres

Read(Fichier, domaines[length(domaines)-1]);

Et ici tu écrase completement le Record ( et donc le pointeur Centres ) tu as donc créé un objet TStrings auquel tu ne peux plus acceder.

bouh
0
Rejoignez-nous