Delphi:SendMessage不发送给FMX

时间:2016-02-25 07:39:00

标签: windows delphi firemonkey

我成功发送了消息跨应用程序。但代码在FMX中不起作用。我可以找到FMX表单,但在dest没有收到消息。

发件人代码:

  CDS.dwData:= 0;   //Identify message
  CDS.cbData:= ByteLength(Str);
  CDS.lpData:= PChar(Str);

  if DstHandle=0 then
    DstHandle := Winapi.Windows.FindWindow(nil, PChar(TargetFormCaption));

  if DstHandle<>0 then
  begin
    Res := SendMessage(DstHandle, WM_COPYDATA, Handle, NativeInt(@CDS));
    Result:= True;
  end
  else
    Result:= False;

结果为true,但未触发WMGetData。 接收者代码:

procedure WMGetData(var Msg : TWMCopyData) ; message WM_COPYDATA;
...
procedure TForm3.WMGetData(var Msg: TWMCopyData);
begin
  Caption:= 'Got something !';
end;

1 个答案:

答案 0 :(得分:7)

FMX中的表单无法以与VCL表单相同的方式接收消息。 FMX不会调度FMX不使用的窗口消息。

解决此问题的干净方法是使用AllocateHWnd创建一个可以接收邮件的窗口。即使对于VCL应用程序来说这也是正确的方法,因为这样的窗口不会重新创建。