在新項目中,我創建了一個包含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