【问题标题】:How to use multiple windows in FireMonkey FM2如何在 FireMonkey FM2 中使用多个窗口
【发布时间】:2012-11-25 20:29:52
【问题描述】:

我知道我可能遗漏了一些东西,但我不明白是什么。 我刚刚创建了一个包含 2 个表单(Form1、Form2)的测试应用程序。 我在 OnClick 事件处理程序中使用以下代码向 Form1 添加了一个按钮:

 Application.CreateForm(TForm2,Form2);
 Form2.Show;

当我单击该按钮时,会按原样显示第二个表单,但如果我单击 Form1,即使它的属性 TopMost 设置为 true,我也无法将其置于最前面。

我错过了什么? 我该如何解决? 我需要展示一些必须始终位于顶部的子表单和主表单。

【问题讨论】:

  • 看起来 form1 是 form2 的所有者。我的意思是 Windows 意义上的所有者。在 VCL 中,术语将是弹出父级。
  • 是的,由 FMX 创建的所有表单都在TPlatformWin.CreateWindow 中设置了ParentWnd。创建的第一个表单使用GetDesktopWindow,这似乎是个糟糕的主意。后续表单使用第一个表单的窗口句柄。这意味着后续表单始终由创建的第一个表单拥有。这太糟糕了。不知道如何解决它,因为我不使用 FMX。我希望我永远不必这样做。
  • 在 XE2 上它按预期工作。如果我使用 XE3 编译,我可以使用 WinDowse 将第一个表单置于顶部(选项卡修改 -> 留在顶部)。但我不知道他们使用哪些 API 和参数来施展魔法……
  • 是的,代码似乎已从 XE2 更改为 XE3。在 XE2 中,所有者始终为 GetDesktopWindow。好吧,模态形式得到特殊处理,但那是题外话。在我看来,这只是 FMX 中的一个设计限制。

标签: delphi delphi-xe3 firemonkey-fm2


【解决方案1】:

我想我可以帮你!

首先,您必须通过选择 File > New > FireMonkey Form | 创建新表单。 Delphi 会将此表单作为 unit2.pas 保存在与 form1 相同的项目中

在unit1.pas中,你编码:

uses Unit2;

在 unit2.pas 之后,您编写“使用 Unit1”的代码

现在,你有多个 Windows 并且可以做任何事情

您可以通过以下方式显示 Form2:'Form2.Show'

再见!祝你好运...

【讨论】:

    猜你喜欢
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多