Problème de compabilité de procédure
Bonjour à toutes et à tous,
J'avais écrit un programme il y a quelques années et qui fonctionnait bien et dans lequel je faisait appel à la procédure OnClick du menu.
Dans la fiche nommé "Base" ou est le menu, était déclaré :
Code:
1 2 3 4 5 6 7 8
|
TBase = class(TForm)
...
public
{ public declarations }
...
procedure ClickMenu(Sender: TObject);
... |
et dans l'implémentation :
Code:
1 2 3 4 5 6 7
| procedure TBase.ClickMenu(Sender: TObject);
begin
with Sender as TMenuItem do
begin
...
end;
end; |
la référence à cette procédure dans une autre unité était :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function AjouteFctExt(Fch: string): Boolean;
var
SousMenu, Menu: TMenuItem;
begin
begin
...
Menu:= TMenuItem.Create(Base.MenuBase);
Base.MenuBase.Items.Insert(i, Menu); {Insertion du menu}
for i:= 1 to N do {Création des N sous-menus}
begin
SousMenu:= TMenuItem.Create(Base.MenuBase);
...
SousMenu.OnClick:= @Base.ClickMenu; {Affectation de la fonction Click}
... |
Je crée un nouveau programme dans lequel je voudrais reproduire ce mécanisme. La différence est que la procédure OnClick n'est plus déclarée dans la fiche "Base", mais dans une autre unité (appelée "LienDLL" qui toutefois utilise "Base").
À la compilation, j'ai l’erreur suivante :
Code:
liensdll.pas(61,28) Error: Incompatible types: got "<address of procedure(TObject);Register>" expected "<procedure variable type of procedure(TObject) of object;Register>"
Que faut-il que je fasse pour qu'il n'y ait plus cette erreur ?
Y a-t-il une forme d'écriture/déclaration qui corrige ce problème ou bien faut-il que je reporte cette procédure dans la fiche de base comme cela était dans mon ancien programme. J'aimerais éviter cette dernière solution.
Cordialement.
Pierre.