lgperrin
Messages postés2Date d'inscriptionvendredi 6 juin 2014StatutMembreDernière intervention 7 juin 2014
-
Modifié par jordane45 le 7/06/2014 à 02:17
lgperrin
Messages postés2Date d'inscriptionvendredi 6 juin 2014StatutMembreDernière intervention 7 juin 2014
-
7 juin 2014 à 08:10
Bonjour,
Je programme sous Delphi5 et j'ai réalisé un programme qui comporte des objets qui sont créés dynamiquement, du type :
TBox = class(TComponent)
private
protected
published
Var1 : boolean
Var2 : Byte
function Calcul; Virtual
procedure Dessine; Virtual
end;
Lors de la création de chaque objet, j'initialise un tableau qui contient tout les noms des TBox créés.
A intervalle régulier je viens scruter le tableau et j'appelle la procédure ou la fonction de la manière suivant :
For I:=0 to High(ReferenceModule) do
begin
If TBox((findComponent(ReferenceModule[I].NomModule)).Calcul then
TBox((findComponent(ReferenceModule[I].NomModule)).Dessine;
end;
Je voudrais utiliser les pointeurs pour appeler la procédure Dessine ou la fonction Calcul. L'idée est de créer un tableau qui contient les pointeurs vers chaque procédure et fonction:
For I:=0 to High(ReferenceModule) do
begin
If ReferenceModule[I].pCalcul then ReferenceModule[I].pDessine;
end;
Avec pCalcul : pointeur vers la fonction calcul et pDessine sur la procédure Dessine.
J'ai cherché sur le web mais rien de ce que j'ai trouvé ne fonctionne.
Est-ce que l'un d'entre vous pourrait me donner la solution.
PS : j'utilise les pointeurs pour accéder directement aux variables (VAr1,2, ... dans l'exemple ci dessus avec un tableau de pointeur) ; dans ce cas tout fonctionne parfaitement.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 7 juin 2014 à 02:33
Salut,
tu te compliques la vie à mon avis
un simple tableau de TBox suffit à tout faire
sur une fiche 1 TMemo 1 TButton et tu complètes comme suit:
...
TBox = class(TComponent)
private
FCaption: string;
published
public
function Calcul: boolean;
procedure Dessine;
property caption: string read FCaption;
end;
var
Form1: TForm1;
ReferenceModule: array of TBox;
implementation
{$R *.dfm}
{ TBox }
// fonction et procedure bidon juste pour tester
function TBox.Calcul: boolean;
begin
Result := True;
FCaption := Name + ' retour de Calcul';
end;
procedure TBox.Dessine;
begin
FCaption := Name + ' retour de Dessine';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
// pour chaque TBox
for I := 0 to High(ReferenceModule) do
// la fonction Calcul est lancée et si elle retourne True
if ReferenceModule[I].Calcul then
begin
// on affiche le résultat
Memo1.Lines.Add(ReferenceModule[I].caption);
// et on lance la procédure
ReferenceModule[I].Dessine;
// et on affiche à nouveau le résultat
Memo1.Lines.Add(ReferenceModule[I].caption);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
begin
// ici on crée un tableau de 8 TBox
SetLength(ReferenceModule, 8);
for I := 0 to High(ReferenceModule) do
begin
// on les crées
ReferenceModule[I] := TBox.Create(nil);
// on leurs donnent un nom
ReferenceModule[I].Name := 'Box'+ IntToStr(I);
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
I: Integer;
begin
// ici on les libèrent
for I := 0 to High(ReferenceModule) do
ReferenceModule[I].Free;
end;
voilà c'est aussi simple que ça
lgperrin
Messages postés2Date d'inscriptionvendredi 6 juin 2014StatutMembreDernière intervention 7 juin 2014 7 juin 2014 à 08:10
Bonjour
Merci beaucoup pour cette réponse.
Effectivement, un tableau de TBox est astucicieux.
Ce que je n'ai pas dis dans mon post c'est que je n'ai pas que TBox ; j'ai une vingtaine d'objets différents, ce qui veux dire qu'il me faut 20 tableaux
7 juin 2014 à 08:10
Merci beaucoup pour cette réponse.
Effectivement, un tableau de TBox est astucicieux.
Ce que je n'ai pas dis dans mon post c'est que je n'ai pas que TBox ; j'ai une vingtaine d'objets différents, ce qui veux dire qu'il me faut 20 tableaux