J'ai un formulaire avec MainMenu et je veux intercepter lorsque l'utilisateur sélectionne un élément de commande à partir d'un menu. Cela fonctionne dans Delphi:Problème avec WM_COMMAND sur 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 J'ai ajouté quelques articles et lorsque je sélectionne les éléments de menu, puis mon Memo1 est rempli:
WMCommand 2
WMCommand 3
WMCommand 3
WMCommand 2
WMCommand 5
...
Je Ported cette application à CCPF/Lazarus , mais il semble que le gestionnaire WM_COMMAND n'est pas appelé! Lorsque j'ai défini le point d'arrêt dans TForm1.WMCommand
dans Delphi puis Delphi arrêté plusieurs fois avant la forme principale est apparue. Lazarus n'a jamais arrêté sur ce point d'arrêt. Je pense que quelque chose est cassé avec WM_COMMAND dans Lazarus, mais peut-être que je ne sais pas quelque chose. Une idée? J'utilise Lazarus 0.9.28.2 beta avec FPC 2.2.4 sous WinXP.
EDIT:
En utilisant Winspector j'ai vérifié que MainMenu génère WM_COMMAND:
WM_COMMAND
Code: 0
Control ID: 2
Control HWND: 0x00000000
Message Posted
Time: 09:37:14.0968
Je pense qu'il ya bogue dans Lazarus/FPC dans la manipulation de la méthode des messages WM_COMMAND et je l'ai signalé: http://bugs.freepascal.org/view.php?id=15521
N'est-ce pas un bug/une fonctionnalité manquante que LM_COMMAND et CN_COMMAND ne fonctionnent pas non plus, alors que la capture au niveau portable de l'événement n'est pas possible non plus? –