TList et Tobject : Probleme d'ajout

Résolu
Utilisateur anonyme - 30 mai 2006 à 18:59
 Utilisateur anonyme - 30 mai 2006 à 23:19
Bonjour;

j'utilise une liste (PlayList) de fichier (TFichier), et apres  l'ajout d'elements, cest toujours le meme qui est present lors d'une consultation. Voyez donc ces extrait de codes pour voir s'ils sont bons :

Declarations :
TFichier = class(TObject)
  public
    Nom : string;
    Dossier : string;
    Complet : string;
    Info : FicMP3;
    Tag : UnTag;
    constructor init(enom: string ; echemin : string ; ecomplet : string);
  end;

PlayList=class(TList)
  public
      nb_elem : integer;
      nb_sel : integer;
      procedure init();
      procedure compiler();
      function obtenir_elem_sel():TFichier;
      function charger_chemin() : string;
      procedure sauver_chemin(ad : string);
   end;

Ajout:
procedure PlayList.compiler();
var
    i,nb : integer;
    Fich : TFichier;

begin
     Media:=Media_Play.create();
     nb:=0;
     For i := 0 to Form1.Liste.items.Count-1 do begin
        Fich.Nom := Form1.Liste.Items[i].Caption;
        Fich.Dossier := Form1.Liste.Items[i].SubItems.Strings[0];
        Fich.Complet:=Fich.Dossier + '\' + Fich.Nom;
        nb:=nb+1;
        LaList.add(Fich);      //ou "add(Fich)";
     end;
     LaList.nb_elem := nb;
end;

Lecture
 
 for i := 0 to nb_elem-1 do begin
    fich := LaList.items[i];
    x := fich.Nom;      //==> Toujours le meme element!
  end;

2 réponses

jace1975 Messages postés 81 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 12 octobre 2007 1
30 mai 2006 à 22:50
plusieurs remarques en lisant ton code en diagonale (je viens juste voir si qqu'un a répondu à ma question):



<li>déjà réécrit le PlayList.compiler(); en rajoutant un paramètre dans l'appel de la procédure, car mettre form1 à l'intérieur ca va t'attirer des pbs tôt ou tard.</li>
<li>perso j'utilise, même s'il existe qques bugs, Tobjectlist plutot que Tlist.</li>

sur ton pb je pense qu'il faudrait plutot écrire un truc du genre(pas testé) :

   Media:=Media_Play.create();
     nb:=0;
     For i := 0 to Form1.Liste.items.Count-1 do begin
         fich:=tfichier.create();// on alloue l'espace mémoire pour chaque objet de ta liste 
{extrait de la doc delphi a tobject.create 
Create construit un objet. ....Le constructeur Create défini par TObject alloue de la mémoire mais n'initialise pas les données
alors que dans ton code tu alloue un seul objet }

        Fich.Nom := Form1.Liste.Items[i].Caption;
        Fich.Dossier := Form1.Liste.Items[i].SubItems.Strings[0];
        Fich.Complet:=Fich.Dossier + '\' + Fich.Nom;
        nb:=nb+1;
        LaList.add(Fich);      //ou "add(Fich)";
     end;
     LaList.nb_elem := nb;
3
Utilisateur anonyme
30 mai 2006 à 23:19
Merci!!

Suis-je bête, il faut initialiser l'objet Fichier avant de s'en servir.

Quel est ton probleme, au fait?
0
Rejoignez-nous