【问题标题】:Second form always stays on top on main form第二种形式始终保持在主要形式的顶部
【发布时间】:2021-03-20 10:51:56
【问题描述】:

我刚刚安装了新的 Delphi Sydney 2 (10.4.2),我发现了一些奇怪的东西:

  • 创建一个新的 vcl 应用程序。
  • 添加新表单。
  • 将第二个表单 Visible 设置为 True(这样我们就可以看到它了)。不要更改任何其他项目设置/表单属性。
  • 运行应用程序。

第二个表单将始终位于主表单之上。
在运行时将 FormStyle 设置为 fsNormal 不会修复该行为。

谁能确认这种行为?

【问题讨论】:

  • 是的,这是默认行为。我会说这是众所周知的。另外:如果这确实是一个错误,它不会是一个 compiler 错误。这将是 RTL 中的一个错误。相关:stackoverflow.com/questions/4241308/…
  • @AndreasRejbrand - 看起来我已经好几年没有从 IDE 开始一个新项目了。谢谢

标签: delphi delphi-10.4.2


【解决方案1】:

解决了。 我回顾了我现有的项目。 他们都将 Application.MainFormOnTaskbar 设置为 false(完全忘记了)。

这是因为我总是从模板开始。看起来模板早于 Vista 时代:)

今天我第一次启动了一个不是该模板副本的应用程序。这解释了为什么这种默认行为对我来说是新的:)

无论如何,我不希望我的应用程序中到处都是“模态”表单。所以,我会坚持 MainFormOnTaskbar = false。当我确实希望子窗体保持在顶部时,我将其设为模态或使用 fsStayOnTop。


最初我认为这个问题应该被删除,但后来我决定把它留在这里作为 Embarcadero 文档的扩展。

【讨论】:

  • 信息:此行为是在 Delphi 2007 中添加的
  • 使用ShowMainFormOnTaskbar=False 通常是个坏主意,现代Windows 集成所需的许多VCL 功能都依赖于true。我一直认为这是 VCL 中非常糟糕的设计选择,但事实就是如此。要获得您想要的行为,请查看调整每个表单的 PopupParent/PopupMode 属性,或覆盖 CreateParams() 以便根据需要设置/清除表单的所有者窗口。
  • 谢谢。我将研究“PopupParent/PopupMode”。 CreateParams 应该被称为 CreateProblems.... :)
猜你喜欢
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 2014-06-01
  • 1970-01-01
相关资源
最近更新 更多