Casting de TList [Résolu]

Messages postés
1039
Date d'inscription
jeudi 2 novembre 2000
Dernière intervention
24 avril 2013
- - Dernière réponse : Nicolas___
Messages postés
1039
Date d'inscription
jeudi 2 novembre 2000
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 ;) )
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Messages postés
329
Date d'inscription
lundi 30 décembre 2002
Dernière intervention
10 mars 2012
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 105 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_shining
Messages postés
329
Date d'inscription
lundi 30 décembre 2002
Dernière intervention
10 mars 2012
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 105 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_shining
Messages postés
329
Date d'inscription
lundi 30 décembre 2002
Dernière intervention
10 mars 2012
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 105 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_shining
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
0
Merci
Salut,

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

 
@+
Cirec

<hr siz="" />
Commenter la réponse de Cirec
Messages postés
1039
Date d'inscription
jeudi 2 novembre 2000
Dernière intervention
24 avril 2013
0
Merci
Salut
Oui surement mais ca ne change rien au problème que je décris
(ou alors je suis une buse )
 Merci
Commenter la réponse de Nicolas___
Messages postés
1039
Date d'inscription
jeudi 2 novembre 2000
Dernière intervention
24 avril 2013
0
Merci
je viens de trouver ca , connaissant le monsieur ca va surement tt m'expliqer
http://www.delphifr.com/codes/UTILISER-TOBJECTLIST_12266.aspx

Je demanderais quoi "si moi ya pas compris" ^^
Commenter la réponse de Nicolas___
Messages postés
1039
Date d'inscription
jeudi 2 novembre 2000
Dernière intervention
24 avril 2013
0
Merci
Au fait sinon Cirec , tu as compris qu'est ce qu'étais mon problème ?
Commenter la réponse de Nicolas___
Messages postés
1039
Date d'inscription
jeudi 2 novembre 2000
Dernière intervention
24 avril 2013
0
Merci
MyValue := TChaise(MyListChaise[i]).Value; Mais oui que je suis , hum hum hum

Merci ! ;)
Commenter la réponse de Nicolas___
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
0
Merci
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="" />
Commenter la réponse de Cirec
Messages postés
1039
Date d'inscription
jeudi 2 novembre 2000
Dernière intervention
24 avril 2013
0
Merci
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 ?
Commenter la réponse de Nicolas___
Messages postés
329
Date d'inscription
lundi 30 décembre 2002
Dernière intervention
10 mars 2012
0
Merci
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
Commenter la réponse de cs_shining
Messages postés
1039
Date d'inscription
jeudi 2 novembre 2000
Dernière intervention
24 avril 2013
0
Merci
Je n'avais pas vu la page 2 , honte à moi

Merci

Nico
Commenter la réponse de Nicolas___

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.