delphi – LazarusFPC上的WM_COMMAND问题

delphi – LazarusFPC上的WM_COMMAND问题,第1张

概述我有MainMenu的表单,我想在用户从菜单中选择一个命令项时拦截. 这适用于Delphi: type TForm1 = class(TForm) ... // Memo and MainMenu created protected procedure WMCommand(var Info: TWMCommand); message WM_COMMAND; end; 我有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中我添加了一些项目,当我从菜单中选择那些项目时
我的Memo1充满了:

WMCommand 2WMCommand 3WMCommand 3WMCommand 2WMCommand 5...

我将此应用程序移植到FPC / Lazarus,但似乎WM_COMMAND
处理程序未被调用!当我在Delphi中的TForm1.WMCommand中设置断点然后是Delphi
在主要形式出现之前停止了很多次.拉撒路从未停止过
在这个断点上.我觉得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应用程序中,您有以下图层:

>申请
> LCL
>小部件设置界面(例如win32 / win64,qt,gtk2,carbon)
>小工具集

WM_COMMAND是从Widgetset Layer到Widget Set接口层的winAPI消息.这些消息不会传递给更高层,考虑到可移植性,其他窗口小部件集不会产生此类消息.

如果要捕获消息,则必须编写非可移植的Widgetset特定代码(在本例中为winAPI代码).您可以使用setwindowlong覆盖windowproc.有关示例,请参见Lazarus wiki.

总结

以上是内存溢出为你收集整理的delphi – Lazarus / FPC上的WM_COMMAND问题全部内容,希望文章能够帮你解决delphi – Lazarus / FPC上的WM_COMMAND问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1272010.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存