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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
TBase = class(TForm)
    ...
  public
    { public declarations }
    ...
    procedure ClickMenu(Sender: TObject);
    ...
et dans l'implémentation :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.