Casting de TList [Résolu]

Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 26 août 2008 à 14:48 - Dernière réponse : Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention
- 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
cs_shining 329 Messages postés lundi 30 décembre 2002Date d'inscription 10 mars 2012 Dernière intervention - 26 août 2008 à 16:06
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

Merci cs_shining 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_shining
Meilleure réponse
cs_shining 329 Messages postés lundi 30 décembre 2002Date d'inscription 10 mars 2012 Dernière intervention - 26 août 2008 à 16:10
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

Merci cs_shining 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_shining
Meilleure réponse
cs_shining 329 Messages postés lundi 30 décembre 2002Date d'inscription 10 mars 2012 Dernière intervention - 26 août 2008 à 18:49
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

Merci cs_shining 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_shining
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 26 août 2008 à 15:00
0
Merci
Salut,

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

 
@+
Cirec

<hr siz="" />
Commenter la réponse de Cirec
Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 26 août 2008 à 15:09
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___
Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 26 août 2008 à 15:32
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___
Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 26 août 2008 à 15:38
0
Merci
Au fait sinon Cirec , tu as compris qu'est ce qu'étais mon problème ?
Commenter la réponse de Nicolas___
Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 26 août 2008 à 16:15
0
Merci
MyValue := TChaise(MyListChaise[i]).Value; Mais oui que je suis , hum hum hum

Merci ! ;)
Commenter la réponse de Nicolas___
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 26 août 2008 à 17:04
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
Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 26 août 2008 à 17:16
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___
cs_shining 329 Messages postés lundi 30 décembre 2002Date d'inscription 10 mars 2012 Dernière intervention - 26 août 2008 à 18:44
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
Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 28 août 2008 à 15:17
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.