Indirection sur des TForms et appel de procédures
Bonjour,
je n'arrive pas à créer - mais je ne sais pas si c'est possible dans ce cas - une indirection sur les TForms permettant d'utiliser des procedures contenues dans ces dernières.
J'ai 2 Forms, Form1 et Form2 qui contiennent chacune une procedure disons ProcHomonyme() définie ainsi
* procedure TForm1.ProcHomonyme(Sender: TObject); //dans l'unit1;
* procedure TForm2.ProcHomonyme(Sender: TObject); //dans l'unit2;
Evidemment bien qu'elles soient homonymes, elles ont des contenus différents. Elles sont appelées lors de la création de chacune des Forms 1 et 2 et ces 2 procédures sont également appelées par une autre Form, TFormMain, ainsi :
uses ...., unit1, unit2;
Code:
1 2 3 4 5 6 7 8 9 10 11
| var
i : integer;
begin
for i := 0 to Screen.FormCount-1 do
// uses StrUtils;
case AnsiIndexStr(Screen.Forms[i].UnitName, ['unit1', 'unit2']) of
0 : Form1.ProcHomonyme(nil);
1 : Form2.ProcHomonyme(nil);
//-1 : Aucun cas
end;
end; |
Cela fonctionne.
Je me suis demandé si je pouvais faire une indirection sur une TForm avec Lazarus. C'est peut-être un peu osé voire même complètement idiot dans ce cas [appel d'une procédure] ?
Donc, toujours dans TFormMain :
type
P = ^TForm;
et dans la procédure d'appel
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| var
i : integer;
F : P;
begin
for i := 0 to Screen.FormCount-1 do
begin
new(F);
F^ := screen.Forms[i];
F^.Caption := 'Truc '+ IntToStr(i); //Fonctionne bien. Le caption des
//Forms est bien changé.
//Par contre
//F^.Name.ProcHomonyme(nil); :oops:
// Peut-on appeler les fonctions ProcHomonyme(nil) ?
// Si oui, comment ?
// Faut-il les déclarer d'une manière spécifique dans les Forms 1 et 2
// (surchargées) pour qu'elles soient appelables avec cette méthode ?
dispose(F);
end;
end; |
Merci. Cordialement.
Gilles