delphi – Lazarus / FPC上的WM_COMMAND问题
我有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中我添加了一些项目,当我从菜单中选择那些项目时 WMCommand 2 WMCommand 3 WMCommand 3 WMCommand 2 WMCommand 5 ... 我将此应用程序移植到FPC / Lazarus,但似乎WM_COMMAND 我在WinXP上使用Lazarus 0.9.28.2 beta和FPC 2.2.4. 编辑: 使用Winspector我检查了MainMenu生成WM_COMMAND: WM_COMMAND Code: 0 Control ID: 2 Control HWND: 0x00000000 Message Posted Time: 09:37:14.0968 我认为在WM_COMMAND消息方法处理中Lazarus / FPC中存在错误,我报告了它:http://bugs.freepascal.org/view.php?id=15521 解决方法
在LCL应用程序中,您有以下图层:
>申请 WM_COMMAND是从widgetset Layer到Widget Set接口层的winapi消息.这些消息不会传递给更高层,考虑到可移植性,其他窗口小部件集不会产生此类消息. 如果要捕获消息,则必须编写非可移植的widgetset特定代码(在本例中为winapi代码).您可以使用setwindowlong覆盖windowproc.有关示例,请参见Lazarus wiki. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |