複数のフォームを持つアプリがあります。これらすべてのフォームには PopupMenu があります。すべてのメニュー項目を共通のルート メニュー項目の下にプログラムで作成します。すべてのメニュー項目で同じプロシージャを呼び出したいのですが、メニュー項目自体が基本的に引数として機能しています....
この機能を実行するフォームが1つしかないときに、これが機能していました。これを行うために複数のフォームが必要になりました。すべてのコードを共通ユニットに移動しています。
Example.
Form A has PopupMenu 1. When clicked, call code in Unit CommonUnit.
Form B has PopupMenu 2. When clicked, call code in unit CommonUnit.
各フォームからポップアップを呼び出す必要がある場合、トップ レベル プロシージャ (ユニット CommonUnit 内) を呼び出し、各フォームのトップ メニュー項目の名前を共通ユニット内のトップ レベル プロシージャに渡します。
コードを使用して PopupMenu に項目を追加しています。
M1 := TMenuItem.Create(TopMenuItem);
M1.Caption := FieldByName('NAME').AsString;
M1.Tag := FieldByName('ID').AsInteger;
M1.OnClick := BrowseCategories1Click;
TopMenuItem.Add(M1);
コンパイル時にエラー メッセージが表示されます。具体的には、OnClick行が不平を言っています
互換性のない型: 'メソッド ポインターと通常のプロシージャ'。
単一のフォームでこれを行っていたときとまったく同じように、BrowseCategories1Click を定義しました。唯一の違いは、フォームの一部としてではなく、共通の単位で定義されるようになったことです。
次のように定義されます。
procedure BrowseCategories1Click(Sender: TObject);
begin
//
end;
これを回避する最も簡単な方法は何ですか?
ありがとうGS