Classes - Héritage ?

[Résolu]
Signaler
Messages postés
73
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
24 juillet 2005
-
Messages postés
73
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
24 juillet 2005
-
Bonjour j'aurai aimer inclure cet objet ci :



type TCUEItem = class (TObject)

Artiste, Titre : String;

Index, Duree : TTime;

Procedure Add(Item:TCUEItem); overload;

Procedure Add(Artiste,titre:String;Index,Duree:TTime); overload;

Procedure Delete(Item:integer);

Procedure Exchange(Index1,Index2:integer);

Procedure Publish(Item:integer;var artiste,titre:string;var Index,Duree:TTime);

Function Count : integer;

end;



dans cet objet-ci :



type TCUEFile = class(TObject)

fichier, Artiste, Titre : String;

Pistes : array of TCUEItem; <--- ICI

// ### Procedures & Fonctions ###

...

end;



Jusque là pas de problème, ms c dans la suite ...

Je prend l'exemple de la procedure Count car c'est la plus parlante.



function TCUEItem.Count : integer;

begin

Result:=Length(???);

// Cherche la dimension de l'array.

// Comme dans une TListBox on peux savoir ne nombre d'items via :

// listbox1.items.count

end;



Est-ce que qqn a une suggestion ?

6 réponses

Messages postés
73
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
24 juillet 2005

D'acc mais mnt que j'y repense, vu que les procédures de TCUEItem
manipule un liste, ne serait-il pas mieux de les mettre dans TCUEFile ?

Mais dans ce cas TCUEItem ne serai plu qu'un enregistrement.



Alexis
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
Oui, je pense que ce serai plus facile à gérer.
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
En fait dans la listbox "Count" n'est pas une fonction mais une "Property".

Donc je pense que c'est une simple variable qui est incrémenté.

Remplace ton "function count:integer;" par "count: integer;"

Ensuite incrémente / décremente simplement ta variable.



Soit Variable: TCUEItem;

Ajoute un "Inc(Variable.Count);" quand tu ajoute un élément.

Ajoute un "Dec(Variable.Count);" quand tu retire un élément.

Messages postés
73
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
24 juillet 2005

Entre temps j'ai eu le tps de finir mon unité.



http://w-x.no-ip.org/alexis2015/forum/viewtopic.php?p=3#3
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
Tu as écrit

i:=length(self.Pistes);


SetLength(self.Pistes,i+1);



Tu pourrai réutiliser ton "count" directement

SetLength(self.Pistes,self.Count+1);



Ensuite je vois ceci:


s:=String(azInteger);


...


if not l>0 then Result:=string(azInteger);



for i:=1 to l do



s:='0'+s;



Result:=s;




Or si tu ne rentre pas dans la boucle s vaut toujours String(azInteger).

Donc la ligne
"if not l>0 then Result:=string(azInteger);" n'est pas utile.(Fait un test)



A la place de


f:=TFileStream.Create(FileName,fmcreate or fmopenreadwrite,fmshareexclusive);




Tu peux directement faire un:


with TFileStream.Create(FileName,fmcreate or fmopenreadwrite,fmshareexclusive) do

begin

...


Write(s[1],length(s));


...

end;



Ca et fait une variable de moins, mais bon la je chipote.
Messages postés
73
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
24 juillet 2005

Oui je pourrai faire toutes ces corrections ...

1) pour le self.count je suis d'acc mais c'est pour être sûr de prendre le bon TCUEFile.

2) pour la boucle je pourrai corrigier comme suis ...

if not l>0 then Result:= s

else for i:=1 to l do s: ='0'+s;

Result:=s;

3) pour le TFileStream, Vu que la variable est "f" c'est un peu inutile



mais merci des corrections