Delphi:在Win7中使用fsStayOnTop的气球窗体无法工作

4

我有一个应用程序,使用自己的气球形式。这是一种非边框,fsStayOnTop类型的形式。

我使用以下代码显示它:

ShowWindow(Handle, SW_SHOWNOACTIVATE);
Visible := True;

今天我意识到,如果我激活另一个应用程序,那么气球提示框就不会出现了!所以它失去了它的"置顶"风格。
环境: Win7/x64 Delphi 6专业版
我能做什么?
谢谢: dd
2个回答

5

在我过去处理置顶窗体时,行之有效的方法:

Form := TMyForm.Create(Self);
Application.NormalizeTopMosts;
SetWindowPos(Form.Handle, HWND_TOPMOST, 0, 0, 0, 0,
             SWP_NOACTIVATE + SWP_NOMOVE + SWP_NOSIZE);
Form.Show;

尝试使用这个替代你的ShowWindow调用。它会一直处于所有窗口的顶部(你真的想要这样吗?)。此外,它感觉有点不正规,因为它省略了文档中建议我们调用的RestoreTopMosts调用(因此,应用程序中其他保持在顶部的窗口也会受到影响)。所以可能有更好的解决方案。


不要使用“+”来组合标志。你需要使用“or”。 - Andreas Rejbrand

0
我尝试了上面的解决方案,但是它在一个次要表单上没有起作用。 我相信它将在主表单上起作用,但对于次要表单则不行。 但是,我找到了一个适用于次要表单的解决方案,这听起来就像原始帖子中想要的,“气球表单”通常是弹出式的。

将以下内容放入“表单B”的OnCreate事件中:

FormStyle := fsStayOnTop;

但仅有此项还不够……

TApplicationEvents拖动到您的“表单B”上

ApplicationEvents1OnDeactivate事件中,添加以下内容:

SetForegroundWindow(Handle);

当我的主表单正在处理数据时,我会关注一个小状态窗口。非常有效!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接