Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 2013
-
26 août 2008 à 14:48
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 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 ;) )
cs_shining
Messages postés304Date d'inscriptionlundi 30 décembre 2002StatutMembreDernière intervention10 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,
cs_shining
Messages postés304Date d'inscriptionlundi 30 décembre 2002StatutMembreDernière intervention10 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é !!
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 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"