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;
Cela fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
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
Merci. Cordialement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
Gilles
Partager