Remplissage d'une TObjectList

Résolu
nathalg - 20 janv. 2014 à 17:56
denisbertin Messages postés 245 Date d'inscription lundi 22 avril 2013 Statut Membre Dernière intervention 13 mai 2023 - 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.

7 réponses

denisbertin Messages postés 245 Date d'inscription lundi 22 avril 2013 Statut Membre Dernière intervention 13 mai 2023 1
21 janv. 2014 à 03:49
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é.
0
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)
0
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 :,(
0
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;
0

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

Posez votre question
denisbertin Messages postés 245 Date d'inscription lundi 22 avril 2013 Statut Membre Dernière intervention 13 mai 2023 1
22 janv. 2014 à 07:36
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];
0
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 :)
0
denisbertin Messages postés 245 Date d'inscription lundi 22 avril 2013 Statut Membre Dernière intervention 13 mai 2023 1
22 janv. 2014 à 10:26
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.
0
denisbertin Messages postés 245 Date d'inscription lundi 22 avril 2013 Statut Membre Dernière intervention 13 mai 2023 1
Modifié par denisbertin le 22/01/2014 à 10:40
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.
0
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
0
denisbertin Messages postés 245 Date d'inscription lundi 22 avril 2013 Statut Membre Dernière intervention 13 mai 2023 1
24 janv. 2014 à 05:14
Ce qui permet d'inaugurer un nouveau espoir plein de félicité.
0
Rejoignez-nous