在新表单 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对象(创建的单例)。