【问题标题】:How can I get the Delphi IDE's Main Form?如何获得 Delphi IDE 的主窗体?
【发布时间】:2009-06-08 22:24:35
【问题描述】:

我正在为 Delphi 编写一个属性编辑器,我希望它显示在正确的屏幕上以支持多显示器。为了定位它,我想引用 Delphi IDE 的“主”表单。

我尝试过使用 Application 的 MainForm 属性和 Application 对象本身,但似乎都不起作用。我相信这是因为 MainForm 实际上是 Nathanial Woolls 在这篇文章中引用的隐藏的 TApplication 实例(搜索“申请表”):

http://www.installationexcellence.com/articles/VistaWithDelphi/Original/Index.html

有谁知道如何获取 IDE 的可见主窗体的句柄。我试图避免一些俗气的事情,比如迭代所有表单并在标题中搜索“CodeGear RAD Studio”。

【问题讨论】:

  • 我希望属性编辑器与对象检查器或表单设计器出现在同一屏幕上,具体取决于我用来调用属性编辑器的哪一个。谁在乎申请表?
  • 我同意,但我不知道如何获得对象检查器窗口的句柄,所以我从一个对大多数用户来说可能是正确的更简单的任务开始。我也考虑过只获取鼠标位置,然后监视它当前所在的位置并使用它。
  • @Jeremy Mullin:你能分享一下你的发现吗?
  • 我的发现在接受答案的 cmets 中。

标签: delphi ide


【解决方案1】:

IDE 的主窗体是Application.MainForm。我的快速测试设计包:

procedure DoStuff(Form: TCustomForm);
var
  S: string;
begin
  S := Form.Caption;
  Form.Caption := S + ' - this one';
  try
    ShowMessage(Format('%s [%s] on monitor %d', [Form.Name, Form.ClassName, Form.Monitor.MonitorNum]));
  finally
    Form.Caption := S;
  end;
end;

initialization
  DoStuff(Application.MainForm);

这在我的例子中显示“AppBuilder [TAppBuilder] on monitor 0”,我可以在主窗体的标题中看到“-this one”后缀。 什么对您的情况似乎不起作用?

【讨论】:

  • 我将其指定为表单的所有者,然后尝试使用 Form.Position 将表单正确定位到 poOwnerCenter。当我开始工作时,我会验证我得到了正确的表单并像你一样检查 Form.Monitor 属性。谢谢!
  • 我得到了它的工作,这是一个范围问题。我不是在我的设计时 BPL 中引用 Application.MainForm,而是在它已加载的 DLL 中引用。在那个范围内它返回零。我无法在 DLL 内创建的表单上使用 TForm.Position 属性(我假设出于相同的范围界定原因),但我能够使用在 BPL 中检索到的 Application.MainForm.Monitor 位置和尺寸手动定位表格。感谢您朝着正确的方向前进!
【解决方案2】:

IIRC 的主要形式称为TAppBuilder,因此FindWindow('TAppBuilder',nil) 之类的内容可能是您的起点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2014-09-12
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 2010-12-26
    相关资源
    最近更新 更多