新しいプロジェクトでは、2つのパネルを持つメインフォームとボタン付きのフォームを作成しました。親ハンドルでメッセージが届かない
私は、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;
私の質問は次のとおりです。最初と前後のバージョンを呼び出すときに、すべてがあります良い。
動作しない3番目のバージョンには何が欠けていますか?
なぜ親に正しいハンドルが含まれていないのですか?親を渡すことのポイントの一部ですか?
ウインドウレクリエーションで燃え尽きます。 AllocateHWndを使用します。またはTThread.Synchronize.Queue。 –
"通常、このメソッドはメッセージに応答する非ビジュアルウィンドウを作成するために使用される"ので、AllocateHWndはこの場合には該当しません。 http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Classes_AllocateHWnd.htmlおよびTThreadを使用する理由問題を説明するためのリンクを指すことができますか、それを説明できますか? – none