Casting de TList

Résolu
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 - 26 août 2008 à 14:48
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 - 28 août 2008 à 15:17
Bonjour ,

Bon j'ai d'abord une premiere qestion : En delphi , est ce que TList est l'equivalent de Vector en Java
 (pour ceux qui connaissent )

c'est à dire que je peux faire des trucs genres :

var
 m : TObjectQuelconque;

for i:= 0 to 50 do begin
    m := TObjectQuelconque.Create(...);
    List.Add(m);
  end;

et m contient tts les occurrences de l'object m

pour Liberer il faut faire ceci (je pense) tt simplement

for i:=0 To List.Count do
   List(i).Free;

Le problème c'est que je n'arrive pas a faire 1 casting de ma TList , explication :

je veux inserer dans ma TList , par Exemple , un TChaise qui possède la propriété Valeur

donc je fais (j'épargne les variables genre i et co ) 
var
m : TChaise; //(Constructeur par Ex , Create(Valeur : integer ) )
MyListChaise : TList;
begin
 MyListChaise := TList.Create;

for i:=0 to 50 do begin
 m := TChaise.create(2000+Random(5000));
MyListChaise.add(m);  
end;

Mais qd je veux la lire en faisant

// une recherche débile , affiche les chaises de valeur inf a 3000
for i:=0 to MyListChaise.Count do begin
  if (MyListChaise(i).Value < 3000) then

(*
  Au fait faire MyListChaise(i) ou MyChaiseListe.Items(i) , c'est équivalent ?

*)
end;

Mais la problème , il ne connait pas la propriété Valeur (qui pourtant existe dans TChaise )
en java , on caste le Vecteur pour remedier à ce problème mais je ne trouve pas de solution en Delphi

Et je ne veux pas utiliser de Tableaux ...

Merci d'avoir lu et j'espere avoir été clair

Bonne journée

Nico

(j'ai mis dans Delphi/Divers/Débutants parce que c'est surement un truc très *** mais comme tt truc très *** ca fait tjs **** ; c'était l'instant politesse ;) )

11 réponses

cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
26 août 2008 à 16:06
Salut,


Le composant TList n'est pas vraiment l'équivalent de la structure vector que l'on trouve en c++, enfin du moins pour sa partie complexe !!!


en revanche une liste de type TList ou bien même TObjectList est une liste de pointeurs et elle gère parfaitement l'ajout des classes puisque par définition une classe est un pointeur de type "record" (par exemple le fameux TMyObject = Object..., qui était la conception même du Pascal Object au temps du turbo pascal), certes une classe est un peu plus complexe qu'une simple structure record puisque elle permet le polymorphisme, héritage ect... masi on gardera en tête que c'est avant toute chose un pointeur !!!

Au fait faire MyListChaise(i) ou MyChaiseListe.Items(i) , c'est équivalent ?
-Réponse: Oui on peut tout à fait écrire l'un comme l'autre à l'exception toute fois !!! en delphi les indexes sont caractétisés par [] au lieu de () !!!.

Mais la problème , il ne connait pas la propriété Valeur (qui pourtant existe dans TChaise )
-Réponse: C'est tout à fait normal puisque une TList n'est qu'une liste de pointeur !!!, pour celà il faudra d'abord dire à Delphi quelle est la nature du pointeur auquel on désire avoir accèss !!, ici on parle de transtypage,

ce qui nous donne au final :

MyValue := TChaise(MyListChaise[i]).Value;


 


@+

Shining-Freeman
3
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
26 août 2008 à 16:10
euhh juste pour finir le composant TObjectList est en effet plus approprié car il permet la libération automatique des Objets(voir le lien de DelphiProg pour plus de détails), et biensûr auquel cas ça serait une liste de component TComponentList sera alors plus approprié !!

sur ce @+

Shining-Freeman
3
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
26 août 2008 à 18:49
Arf décidément .... pour la dernière question

Mais on pourrait le faire avec 1 TList , non ?

Réponse: tout à fait !!! mais dans ce cas il faudra détruire les objets par soi-même !!!

for  i  : = 0 to MyList.Count-1 do
begin
      TChaise(MyList[i]).Free;
      MyList[i] : = nil;
end;

bon cette fois-ci c'est la bonne @+

Shining-Freeman
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
26 août 2008 à 15:00
Salut,

le TObjectList ne serrait il pas plus adapté à ton cas

 
@+
Cirec

<hr siz="" />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
26 août 2008 à 15:09
Salut
Oui surement mais ca ne change rien au problème que je décris
(ou alors je suis une buse )
 Merci
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
26 août 2008 à 15:38
Au fait sinon Cirec , tu as compris qu'est ce qu'étais mon problème ?
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
26 août 2008 à 16:15
MyValue := TChaise(MyListChaise[i]).Value; Mais oui que je suis , hum hum hum

Merci ! ;)
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
26 août 2008 à 17:04
ah ben voilà ... de retour après la bataille ^^

Shining, que je salut au passe, a remarquablement répondu à tes questions

"

Au fait sinon Cirec , tu as compris qu'est ce qu'étais mon problème ?"

ben je dois avouer que non, comme le choix se me semblait pas judicieux je n'ai pas réellement approfondi la suite de la question et du coup ton problème ne m'est apparu évident qu'après avoir lu les réponses de Shining

mais j'avais quand même une bonne piste de départ "TObjectList"

 
@+
Cirec

<hr siz="" />
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
26 août 2008 à 17:16
ben oui ... dommage j'avais cru être clair mais c vrai que mon TList devait pas bcp t'aidé ;

Mais on pourrait le faire avec 1 TList , non ?
0
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
26 août 2008 à 18:44
Citation de: Nicolas_
begin
      MyValue := TChaise(MyListChaise[i]).Value; Mais oui que je suis ,  hum hum hum

Merci ! ;)
end.// fin de citation

with Reply do
mais de rien tout le plaisir était pour moi !!!

Citation de:Cirec
begin
      ah ben voilà ... de retour après la bataille ^^
     Shining, que je salut au passe, a remarquablement répondu à tes questions
end.

with Reply do
begin
       Salut Cirec ça fait plaisir de te revoir !!!, mais saperlipopette kaiss'ke j'vois  !!!! .., Cirec Admin yepah la classe
end.

bon sur ce @+ et comme qui dirait un certain jean claude vandal !!,  j'vais allé cassé la dalle !!! 

Shining-Freeman
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
28 août 2008 à 15:17
Je n'avais pas vu la page 2 , honte à moi

Merci

Nico
0
Rejoignez-nous