MainMenu のフォームがあり、ユーザーがメニューからコマンド項目を選択したときにインターセプトしたい。これは Delphi で機能します。
type
TForm1 = class(TForm)
... // Memo and MainMenu created
protected
procedure WMCommand(var Info: TWMCommand); message WM_COMMAND;
end;
procedure TForm1.WMCommand(var Info: TWMCommand);
begin
if (Info.ItemID < 10) then
Memo1.Lines.Add('WMCommand ' + IntToStr(Info.ItemID));
end;
MainMenu にいくつかの項目を追加し、メニューからそれらの項目を選択すると、Memo1 が次のように入力されます。
WMCommand 2
WMCommand 3
WMCommand 3
WMCommand 2
WMCommand 5
...
このアプリケーションを FPC/Lazarus に移植しましたが、WM_COMMAND ハンドラが呼び出されていないようです! Delphi でブレークポイントを設定するとTForm1.WMCommand
、メイン フォームが表示される前に Delphi が何度も停止しました。Lazarus は、このブレークポイントで停止することはありませんでした。Lazarus の WM_COMMAND で何かが壊れていると思いますが、何かわからないことがあります。何か案が?
WinXP で FPC 2.2.4 を搭載した Lazarus 0.9.28.2 ベータ版を使用しています。
編集:
Winspector を使用して、MainMenu が WM_COMMAND を生成することを確認しました。
WM_COMMAND
Code: 0
Control ID: 2
Control HWND: 0x00000000
Message Posted
Time: 09:37:14.0968
Lazarus/FPC の WM_COMMAND メッセージ メソッドの処理にバグがあると思い、報告しました: http://bugs.freepascal.org/view.php?id=15521