TList et Tobject : Probleme d'ajout [Résolu]

mobilotek 37 Messages postés vendredi 27 mai 2005Date d'inscription 3 décembre 2007 Dernière intervention - 30 mai 2006 à 18:59 - Dernière réponse : mobilotek 37 Messages postés vendredi 27 mai 2005Date d'inscription 3 décembre 2007 Dernière intervention
- 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;
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
jace1975 84 Messages postés mardi 31 mai 2005Date d'inscription 12 octobre 2007 Dernière intervention - 30 mai 2006 à 22:50
3
Merci
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;

Merci jace1975 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de jace1975
mobilotek 37 Messages postés vendredi 27 mai 2005Date d'inscription 3 décembre 2007 Dernière intervention - 30 mai 2006 à 23:19
0
Merci
Merci!!

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

Quel est ton probleme, au fait?
Commenter la réponse de mobilotek

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.