【问题标题】:How do I bring my window to the front after a DDE event?如何在 DDE 事件后将窗口置于最前面?
【发布时间】:2009-03-07 12:08:25
【问题描述】:

在 DDE 事件中,我的程序加载了一个文件并应该弹出到前台。 我正在使用

show;

它似乎只有在我隐藏窗口时才起作用。

所以我加了

bringtofront;

如果它被隐藏、关闭、最小化或在图标托盘中,这同样有效,但如果它在另一个窗口下打开则无效。

我什至尝试了一些 hacky 的东西,比如

windowstate:=wsminimized;
windowstate:=wsnormal;

尝试强制显示,但无济于事。我知道代码正在运行,因为我在此块的两侧都有打印输出,并且没有可能卡在其中的条件语句。

【问题讨论】:

    标签: delphi focus show dde


    【解决方案1】:

    您是否尝试过SetForegroundWindow 和/或SetActiveWindow?另请参阅 MSDN info 关于此主题。

    【讨论】:

      【解决方案2】:

      SetForegroundWindow 并不总是有效。事实上,现在它不太可能起作用,因为应用程序不应该抓住焦点,它们只能放弃它。 MS 已经尝试了 以防止应用程序窃取输入焦点。阅读 Raymond Chen 的 blog entry 上的 cmets 了解一些历史。

      所以,如果你自己是前台应用程序,你可以 SetForegroundWindow 到另一个应用程序,一切都会很好。如果您不是前台应用程序,则唯一可能发生的事情是任务栏按钮开始闪烁。

      只是为了增加一些混乱,确切的行为取决于 Windows 版本,所以会发生什么取决于您运行的是什么类型的 Windows - 他们已经搞砸了很长时间:-)。

      【讨论】:

      • 发送DDE事件的程序需要通过调用AllowSetForegroundWindow来配合。我希望 Explorer 会这样做,但其他程序可能会忽略这个细节。
      • 这也是一件好事。我真的不喜欢其他程序抓住焦点。
      猜你喜欢
      • 2023-02-17
      • 1970-01-01
      • 2017-12-02
      • 1970-01-01
      • 2022-09-23
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多