
这适用于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
>小部件设置界面(例如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问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)