我使用MainMenu創建了窗體,並且當用戶從菜單中選擇一個命令項時我想攔截。 這工作在Delphi:關於Lazarus/FPC上的WM_COMMAND的問題
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 /拉撒路,但似乎沒有調用WM_COMMAND 處理程序!當我在Delphi中設置TForm1.WMCommand
斷點時,Delphi 在主窗體出現之前停止了很多次。在這個斷點處,拉撒路從未停止過 。我認爲拉扎魯斯的WM_COMMAND 有問題,但我可能不知道。任何想法?
我在WinXP上使用Lazarus 0.9.28.2 beta和FPC 2.2.4。
編輯:
使用Winspector我檢查的MainMenu產生WM_COMMAND:
WM_COMMAND
Code: 0
Control ID: 2
Control HWND: 0x00000000
Message Posted
Time: 09:37:14.0968
我認爲這是錯誤的拉撒路/ FPC在WM_COMMAND消息的方法處理我報告說,它:http://bugs.freepascal.org/view.php?id=15521
是不是可能是一個錯誤/缺少的功能,LM_COMMAND和CN_COMMAND也無法正常工作,便攜式級別的事件捕獲也是不可能的? – 2010-01-16 17:53:06