我正在使用Delphi XE7将Windows VCL应用程序移植到Windows FMX(Firemonkey),并且一直困在这个问题上......
如何在Firemonkey表单上接收WM_COPYDATA等消息?
我在表单的procedure WMCopyData(var msg: TWMCopyData); message WM_COPYDATA;
部分有protected
,但邮件从未收到过。 VCL表单上的相同代码工作正常。我明白为什么它不起作用(FMX不使用Windows消息循环?),不知道如何处理它。
答案 0 :(得分:0)
message
关键字传递邮件。
在任何情况下,您的VCL代码都有点不稳定,因为它假定您的窗体窗口不会被重新创建。重新创建窗口是非常合理的,因此使用窗体的窗口句柄作为消息接收者是一种可疑的做法。
解决该问题以及解决FMX问题的最佳方法是创建一个专门用于接收这些消息的窗口。如果你控制窗口创建,那么只要你需要它就可以确保窗口存在,并且不受VCL窗口重新创建的影响。
在Windows平台上,您可以通过System.Classes
单元拨打AllocateHWnd
来执行此操作。当然这是特定于Windows的,但WM_COPYDATA
是Windows特定的,因此不会成为您关心的问题。