Tengo formulario con MainMenu y quiero interceptar cuando el usuario selecciona un elemento de comando de un menú. Esto funciona en Delphi:Problema con WM_COMMAND en 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;
En MainMenu he añadido algunos elementos y cuando selecciono los elementos de menú y luego mi Memo1 está lleno de:
WMCommand 2
WMCommand 3
WMCommand 3
WMCommand 2
WMCommand 5
...
porté esta aplicación para FPC/Lázaro , pero parece que el manejador WM_COMMAND no se llama! Cuando establecí el punto de interrupción en TForm1.WMCommand
en Delphi, Delphi se detuvo varias veces antes de que apareciera el formulario principal. Lazarus nunca detuvo el en este punto de interrupción. Creo que algo está roto con WM_COMMAND en Lazarus, pero tal vez no sé algo. ¿Alguna idea?
Uso Lazarus 0.9.28.2 beta con FPC 2.2.4 en WinXP.
EDIT:
Usando Winspector I comprobado que MainMenu genera WM_COMMAND:
WM_COMMAND
Code: 0
Control ID: 2
Control HWND: 0x00000000
Message Posted
Time: 09:37:14.0968
Creo que hay error en Lázaro/FPC en WM_COMMAND manejo método de mensaje y me informó que: http://bugs.freepascal.org/view.php?id=15521
¿No es posiblemente una característica de error/falta que LM_COMMAND y CN_COMMAND tampoco funcionen, no obstante, no es posible capturar en el nivel portátil del evento? –