在新项目中,我创建了一个包含2个面板的MainForm和一个带按钮的Form。父消息传递时消息未到达
我加在MainForm的这段代码:
interface
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
procedure FormCreate(Sender: TObject);
private
procedure OnMyMessage(var Msg: TMessage); message WM_FILEREADY;
public
{ Public declarations }
end;
implementation
uses
PannelForm;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
with TForm2.Create(self) do
try
parent := panel2;
borderstyle := bsNone;
InnerHandle := self.Handle;
Show;
finally
end;
end;
procedure TForm1.OnMyMessage(var Msg: TMessage);
begin
showmessage('got event');
end;
而这种代码的形式与一个按钮:
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
InnerHandle:HWND;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
// PostMessage(Application.Mainform.Handle, WM_FILEREADY, 0, 0); // works
// PostMessage(Application.Handle, WM_FILEREADY, 0, 0); // not working
// PostMessage(parent.Handle, WM_FILEREADY, 0, 0); // not working
PostMessage(InnerHandle, WM_FILEREADY, 0, 0); // works
end;
我的问题是:调用第一和第四版本时,一切都精细。
在第三个版本中没有工作时缺少什么?
为什么父母不包含正确的句柄?是不是通过父母的(一部分)点?
窗口娱乐会烧你。使用AllocateHWnd。或TThread.Synchronize.Queue。 –
“通常,此方法用于创建对消息作出响应的非可视窗口”,因此AllocateHWnd不适用于此情况。 http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Classes_AllocateHWnd.html以及为什么要使用TThread?你能指出一个链接来解释这个问题,还是解释它? – none