Mam formularz z MainMenu i chcę przechwycić, gdy użytkownik wybierze element polecenia z menu. Działa to w Delphi:Problem z WM_COMMAND na 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;
W mainmenu dodałem kilka elementów i kiedy wybrać te pozycje z menu następnie mój Memo1 jest wypełniona:
WMCommand 2
WMCommand 3
WMCommand 3
WMCommand 2
WMCommand 5
...
I przeniósł tę aplikację do FPC/Lazarus , ale wygląda na to, że obsługa WM_COMMAND nie jest wywoływana! Kiedy ustawiłem breakpoint w TForm1.WMCommand
w Delphi, to Delphi zatrzymał się wiele razy przed pojawieniem się głównej formy. Lazarus nigdy nie zatrzymywał się na tym punkcie przerwania . Myślę, że coś jest zepsute przez WM_COMMAND w Łazarzu, ale może nie wiem czegoś. Dowolny pomysł?
Używam Lazarus 0.9.28.2 beta z FPC 2.2.4 na WinXP.
EDIT:
Korzystanie Winspector sprawdziłem że mainmenu generuje WM_COMMAND:
WM_COMMAND
Code: 0
Control ID: 2
Control HWND: 0x00000000
Message Posted
Time: 09:37:14.0968
myślę, że jest błąd w Lazarus/FPC w WM_COMMAND obchodzenia metoda wiadomość i zgłosiłem go: http://bugs.freepascal.org/view.php?id=15521
Czy nie jest to prawdopodobnie błąd/brakująca funkcja, że LM_COMMAND i CN_COMMAND również nie działają, nie można również przechwycić na przenośnym poziomie zdarzenia? –