【问题标题】:Prevent main form from appearing when showing another form显示另一个窗体时防止主窗体出现
【发布时间】:2011-06-04 22:15:40
【问题描述】:

我正在尝试将我的次要形式带到前台,但是当我这样做时

MyForm.Show; // It may be hidden, therefore show it first
SetForegroundWindow(MyForm.Handle);

我的主窗体也会出现。我可以防止这种情况的唯一方法是MainForm.Hide;,但我必须避免这种情况。

我的想法是让我的辅助表单出现在另一个应用程序的顶部,而我的主表单也不必这样做。

【问题讨论】:

  • 这不是你几个月前提出的同一个问题stackoverflow.com/questions/5393666/…
  • @David - 不是真的 - 这次的问题是我的辅助表单不能以编程方式被带到前台,没有我的主表单跟随。
  • 这都是windows标准行为的一部分。次要表格归我认为的主要表格所有?我的意思是用 Windows 术语而不是 VCL 术语。
  • @David - 是的,但是我尝试设置 TCreateParams.WndParent := 0;,但也无济于事。
  • Here 在 embarcadero 新闻组上讨论了类似问题。不过我不知道结果。

标签: forms delphi window


【解决方案1】:

如果您考虑为此功能制作另一个应用程序,那么您还可以考虑以下折衷方案:将 MainForm 最小化到任务栏(而不是隐藏它),以防止它在激活另一个表单时弹出。

如果是这样,请尝试this answer。它确实为辅助表单的任务栏添加了一个额外的图标,但我想这不会有问题,因为不同的应用程序也可以。但是,如果 MainForm 没有被最小化而是被其他窗口混淆,那么激活辅助窗体也会弹出 MainForm,就像您现在所经历的那样。

为了这个答案的完整性,但绝不意味着作为建议:this answer 描述了一个(有点实验性的)构造来制作完全独立的窗口。我测试该解决方案的时间很少,它似乎工作,但准备好不再指望 VCL 的完整/默认功能。

【讨论】:

  • 我决定为这个功能创建一个完整的另一个程序。哪里有逆境,哪里就有机会。 =)
  • 这是一个很快的决定!但实际上,单独的应用程序会更吸引您的用户。
  • 正如我所说,Where theres adversity theres oportunity.,呵呵。 :)
【解决方案2】:

尝试将表单的状态设置为fsAlwaysOnTop。

【讨论】:

  • 这很有帮助,直到我点击表格中的某个地方。
  • 然后会发生什么?主窗体弹出?那是因为在这种情况下,您的应用程序及其所有形式都会被激活。为防止这种情况发生,您确实需要隐藏主窗体,或者将始终位于顶部的窗体放在单独的进程/应用程序中。后者可能更复杂,因为您需要找到一种方法让两个独立的应用程序进行通信。
  • 恐怕没有别的办法了。要么隐藏主窗体,要么让两个窗体都存在于不同的应用程序中。否则,一旦应用程序被激活,它们都将成为顶部。
  • @Golez - 我想我需要做另一个应用程序。将其添加到您的答案中,如果大卫也无法弄清楚,我会标记它。 :)
  • 我不相信这不能从单个进程中完成
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 2011-04-22
相关资源
最近更新 更多