Remplissage d'une TObjectList [Résolu]

- - Dernière réponse : denisbertin
Messages postés
197
Date d'inscription
lundi 22 avril 2013
Statut
Membre
Dernière intervention
27 septembre 2019
- 24 janv. 2014 à 05:14
Bonjour,
Je souhaiterai remplir une TObjectList avec des objets que j'ai instancié à partir d'une autre classe.
procedure TForm1.FormCreate(Sender: TObject);
var
i : integer;
begin
//Création des tâches
Tache1 := TRobotTask.Create();
Tache2 := TRobotTask.Create();
Tache3 := TRobotTask.Create();

Sachant que j'ai déjà crée la TObjectList comme suit:
//Création et initialisation de la liste des taches
ListeDesTaches := TObjectList.Create(True);
for i := 0 to ListeDesTaches.Count - 1 do
ListeDesTaches.Add(pointer(-1));


Aussi que chaque tache possède : un nom, un commentaire et une Liste de 12 entiers.

Comment faire pour remplir ma liste des taches avec mes taches et leurs attributs.
J'ai essayé de faire:
//ListeDesTaches.add((Tache1));
//ListeDesTaches.add((Tache2));
//ListeDesTaches.add((Tache3));
Mais ça n' a pas marché.

Je vous remercie pour votre aide.
Afficher la suite 

7 réponses

Messages postés
197
Date d'inscription
lundi 22 avril 2013
Statut
Membre
Dernière intervention
27 septembre 2019
1
0
Merci
Pour être un bon programmeur il faut agir avec méthode.
Ton code celui que tu viens de proposer semble farfelus en effet
Il ne semble pas être dans le bon ordre pourquoi en effet parcourir
comme tu le fait la liste des tache après l'avoir créer alors que cette liste est vide, c'est complètement dénué d'intérré.
Commenter la réponse de denisbertin
0
Merci
Bonjour,
Je ne vois pas que ma liste est vide, je l'ai d'abord crée puis initialisé ce qui me semble très logique ^^ (Après, je ne m y connais pas trop en liste, je sui débutante :( je n'aurai sinon pas posé une telle question sur le forum :s)
Commenter la réponse de nathalg
0
Merci
J'ai finalement compris ce que tu voulais dire :D
Là c'est mieux:
//Fiche création****************************************************************
procedure TForm1.FormCreate(Sender: TObject);
var
i, j : integer;
begin
//Création des tâches
Tache1 := TRobotTask.Create();
Tache2 := TRobotTask.Create();
Tache3 := TRobotTask.Create();
Tache4 := TRobotTask.Create();

//Création de la liste des taches
ListeDesTaches := TObjectList.Create(True);

//Remplissage de la liste des taches
ListeDesTaches.add((Tache1));
ListeDesTaches.add((Tache2));
ListeDesTaches.add((Tache3));
ListeDesTaches.add((Tache4));

//Initialisation de la liste des taches
for i := 0 to ListeDesTaches.Count - 1 do
ListeDesTaches.Add(pointer(-1));

// Configuration des Taches
for i := 0 to ListeDesTaches.Count - 1 do
with ListeDesTaches[i] as TRobotTask do
begin
Name := 'Tache' + IntToStr(i);
end;

with ListeDesTaches[1] as TRobotTask do
for j := 0 to Tache1.DIS.Count - 1 do
begin
DIS[j]:= pointer (j mod 3);
Comment := 'Trans x';
end;

with ListeDesTaches[2] as TRobotTask do
for j := 0 to Tache2.DIS.Count - 1 do
begin
DIS[j] := pointer (j mod 2);
Comment := 'Trans y';
end;

with ListeDesTaches[3] as TRobotTask do
for j := 0 to Tache2.DIS.Count - 1 do
begin
DIS[j] := pointer (j mod 3);
Comment := 'Trans z';
end;

with ListeDesTaches[4] as TRobotTask do
for j := 0 to Tache2.DIS.Count - 1 do
begin
DIS[j] := pointer (j mod 2);
Comment := 'Trans o';
end;
end;
Sauf que là j'ai une grosse erreur dont je ne connais pas la provenance :,(
Commenter la réponse de nathalg
0
Merci
J'ai trouvé une toute petite erreur, mais ça me fais toujours la même exception :(

Voici ce que j'ai corrigé:


// Configuration des Taches
for i := 0 to ListeDesTaches.Count - 1 do
with ListeDesTaches[i] as TRobotTask do
begin
Name := 'Tache' + IntToStr(i);
end;

with ListeDesTaches[1] as TRobotTask do
begin
Comment := 'Trans x';
for j := 0 to Tache1.DIS.Count - 1 do
DIS[j]:= pointer (j mod 3);
end;

with ListeDesTaches[2] as TRobotTask do
begin
Comment := 'Trans y';
for j := 0 to Tache2.DIS.Count - 1 do
DIS[j] := pointer (j mod 2);
end;

with ListeDesTaches[3] as TRobotTask do
begin
Comment := 'Trans z';
for j := 0 to Tache2.DIS.Count - 1 do
DIS[j] := pointer (j mod 3);
end;

with ListeDesTaches[4] as TRobotTask do
begin
Comment := 'Trans o';
for j := 0 to Tache2.DIS.Count - 1 do
DIS[j] := pointer (j mod 2);
end;
Commenter la réponse de nathalg
Messages postés
197
Date d'inscription
lundi 22 avril 2013
Statut
Membre
Dernière intervention
27 septembre 2019
1
0
Merci
je n'est pas l'ensemble de ton code source mais apparemment tu cherche avec la fonction pointer à obtenir l'adresse d'une variable
local plutôt que l'adresse de ton objet, note aussi que tu pourrais utiliser @ListeDesTaches.items[index];
Commenter la réponse de denisbertin
0
Merci
Bonjour,

J'ai finalement réussi à trouver mon problème (enfin mes problèmes):

Le premier, était que je détruisais ma liste juste après l'avoir créé, sachant que je l'utilisais juste après.

Le deuxième, était que j'initialisais ma liste d'objet comme étant une liste d'entiers :s.

Je ne sais toujours pas comment initialiser une liste d'objets, ni quand il faut exactement la détruire, et quand je la détruis à la fin de mon programme, ça me génère une autre exception, chose que je ne comprends pas.

Mon programme fonctionne comme même comme je veux, mais pas logique.

Bonne journée denisbertin :)
Commenter la réponse de nathalg
Messages postés
197
Date d'inscription
lundi 22 avril 2013
Statut
Membre
Dernière intervention
27 septembre 2019
1
0
Merci
La programmation est un art délicat qui demande beaucoup de tendresse envers son micro-ordinateur - en effet quand tu trouveras comment résoudre ces problèmes tu pourras dire qu'ils sont élucidés - De plus : chaque objet doit être initialisé et libéré comme avec une paire qui s'assemble l'un et l'autre pour ainsi dire.
On doit observer une parité entre les allocations et les libérations qui doivent être égales comme deux accolades.
denisbertin
Messages postés
197
Date d'inscription
lundi 22 avril 2013
Statut
Membre
Dernière intervention
27 septembre 2019
1 -
Pour faire de l'informatique il faut connaitre qu'un programme à un début et une fin que chaque éléments de ton programme demande d'être ordonné selon une méthode dont la connaissance est soit induite par l'expérience ou encore par les exercices que tu pratique que que tu doit comprendre.
Oui bon, je suis encore débutante, mais l'expérience viendra surement avec le temps..............................et j'ai tout le temps devant moi, donc je n'ai pas de quoi m'inquiéter............ :p
denisbertin
Messages postés
197
Date d'inscription
lundi 22 avril 2013
Statut
Membre
Dernière intervention
27 septembre 2019
1 -
Ce qui permet d'inaugurer un nouveau espoir plein de félicité.
Commenter la réponse de denisbertin