在新表单 shown/open 时收到通知
Get notified when a new form is shown/open
应用程序在打开模态窗体时触发事件 On Modal Begin。
当非模态 TForm shown/opened 与 TApplication.OnModalBegin 相同时,有没有办法得到通知?
您可以在 TApplicationEvents
上捕获一些消息,这些消息可以帮助您检测新表单何时 created/showed。
在 TApplicationEvents
组件的 OnMessage
事件上使用此代码。
procedure TFormMain.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
var
f:TCustomForm;
function GetFormByHandle(const AHandle:Hwnd):TCustomForm;
var
i:Integer;
begin
Result := nil;
for i := 0 to (Screen.FormCount - 1) do
if (Screen.Forms[i].Handle = AHandle) then
Result := Screen.Forms[i];
end;
begin
if (Msg.message = WM_DWMNCRENDERINGCHANGED) then begin // detect new form
f := GetFormByHandle(Msg.hwnd); // Search on Scren by handle
if Assigned(f) then
Memo1.Lines.Add(' Name:' + f.Name + ' - Handle: ' + IntToStr(Msg.hwnd) + ' - Classname: ' + f.ClassName); /7 show info
end;
end;
创建新表单时,您可以使用句柄(带有消息参数)获取他的信息并询问Screen
对象(创建的单例)。
应用程序在打开模态窗体时触发事件 On Modal Begin。
当非模态 TForm shown/opened 与 TApplication.OnModalBegin 相同时,有没有办法得到通知?
您可以在 TApplicationEvents
上捕获一些消息,这些消息可以帮助您检测新表单何时 created/showed。
在 TApplicationEvents
组件的 OnMessage
事件上使用此代码。
procedure TFormMain.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
var
f:TCustomForm;
function GetFormByHandle(const AHandle:Hwnd):TCustomForm;
var
i:Integer;
begin
Result := nil;
for i := 0 to (Screen.FormCount - 1) do
if (Screen.Forms[i].Handle = AHandle) then
Result := Screen.Forms[i];
end;
begin
if (Msg.message = WM_DWMNCRENDERINGCHANGED) then begin // detect new form
f := GetFormByHandle(Msg.hwnd); // Search on Scren by handle
if Assigned(f) then
Memo1.Lines.Add(' Name:' + f.Name + ' - Handle: ' + IntToStr(Msg.hwnd) + ' - Classname: ' + f.ClassName); /7 show info
end;
end;
创建新表单时,您可以使用句柄(带有消息参数)获取他的信息并询问Screen
对象(创建的单例)。