У меня есть форма с MainMenu, и я хочу перехватить, когда пользователь выбирает элемент команды из меню. Это работает в Delphi:Проблема с WM_COMMAND на Lazarus/FPC
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 0.9.28.2 beta с 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
Не может ли быть ошибка/отсутствует функция, которую LM_COMMAND и CN_COMMAND тоже не работают, невозможно ли захватить на переносном уровне событие? –