显示/打开新表单时收到通知

发布于 2025-01-14 07:08:58 字数 124 浏览 1 评论 0原文

当模式 TForm 打开时,TApplication 会触发 OnModalBegin 事件。

当非模态 TForm 以与 TApplication.OnModalBegin 相同的方式显示/打开时,有没有办法收到通知?

TApplication triggers the event OnModalBegin when a modal TForm is opened.

Is there a way to get notified when a non modal TForm is shown/opened the same wayt TApplication.OnModalBegin does ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

老子叫无熙 2025-01-21 07:08:58

您可以在 TApplicationEvents 上捕获一些消息,这些消息可以帮助您检测何时创建/显示新表单。

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

输入图像此处描述

You can capture some messages on TApplicationEvents that can help you to detect when a new form is created/showed.

Use this code on OnMessage event of TApplicationEvents component.

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;

When a new form is created you can obtain his information using the Handle (come with params of message) and interrogate the Screen object (singleton created).

enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文