У меня есть форма с 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 не вызывается!Когда я устанавливал точку останова в TForm1.WMCommand
в Delphi, Delphi останавливался много раз, прежде чем появилась основная форма.Лазарь никогда не останавливался на этой точке останова.Я думаю, что что-то не работает с WM_COMMAND в Lazarus, но, возможно, я чего-то не знаю.Любая идея?
Я использую бета-версию Lazarus 0.9.28.2 с FPC 2.2.4 на WinXP.
EDIT:
Используя 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