【问题标题】:TfrmMain and TApplication - what are these for?TfrmMain 和 TApplication - 这些是干什么用的?
【发布时间】:2010-09-25 23:23:12
【问题描述】:

我是 Delphi 新手,但我正在尝试使用 Spy++ 了解 TApplication 和 TfrmMain 窗口之间的关系。 TfrmMain 窗口似乎是具有适当屏幕坐标的真实窗口,但 TApplication 窗口是出现在 Windows 任务栏中的窗口。而且,它们之间似乎根本没有任何关系。一个不是另一个的父窗口,那么这些窗口是如何链接在一起的呢?为什么非 UI 窗口会获得 Windows 任务栏按钮?任何 Delphi 专家可以帮助我理解这一点吗?

【问题讨论】:

    标签: delphi


    【解决方案1】:

    TApplication 是封装您的应用程序并处理诸如 Windows 消息传递之类的事情的类。 TfrmMain 将是 TForm 的子类,它将成为您的应用程序“主窗体”。

    所以基本上,TApplication 可以说是控制器,它拥有并创建 TfrmMain,并将消息转发给它,或者它的任何子节点。

    查看您的 projectname.pas 文件,您会看到如下内容:

    program Project1;
    uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1};
    {$R *.RES}
    begin
      Application.Initialize;
      Application.CreateForm(TfrmMain, frmMain) ;
      Application.Run;
    end.
    

    其中 Application 的类型为 TApplication。

    【讨论】:

    • 你知道如何使用 Win32 代码(不是从 Delphi 应用程序内部)获取 TfrmMain 的控制器窗口句柄吗?奇怪的是,TfrmMain 窗口似乎并不属于 TApplication 窗口。
    • 我认为你必须使用 GetWIndowHandle(formcaption) 或类似的东西
    【解决方案2】:

    对于使用 Delphi 2007 之前的 Delphi 版本制作的应用程序,“秘密窗口”将是 Vista 的 Flip 3D 或预览中的可见窗口。这是一篇很棒的文章,解释了如何在 Delphi 2006(及更早版本)上编译 Delphi 应用程序,以便不显示“秘密窗口”:here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      • 2019-10-22
      • 1970-01-01
      相关资源
      最近更新 更多