Delphi:带有fsStayOnTop的Balloon表单在Win7中不起作用

时间:2011-10-26 08:39:56

标签: forms delphi window balloon topmost

我有一个使用我自己的气球表格的应用程序。 这是一种无边界的fsStayOnTop形式。

我用这段代码显示:

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

今天我意识到,如果我激活另一个应用程序,那么气球就不会出现了! 所以它正在失去它的顶级风格。

环境: Win7的/ 64 德尔福6专业版

我可以用它做什么?

感谢:    DD

2 个答案:

答案 0 :(得分: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来电。这仍然位于所有窗口的顶部(您真的想要这个吗?)。它也感觉有点hacky,因为它省略了文档说我们应该调用的RestoreTopMosts调用(因此应用程序中的其他保持在顶部的窗口将受到影响)。所以可能有更好的解决方案。

答案 1 :(得分:0)

我尝试了上述解决方案,但无法在辅助表单上使用。我相信它将在主要形式上起作用,但不能在次要形式上起作用。但是,我确实找到了一种适用于辅助表格的解决方案,听起来像原始海报想要的那样,因为“气球表格”通常是弹出窗口。

将其放在“ Form B” OnCreate事件中:

FormStyle:= fsStayOnTop;

但是仅靠这还不够...

TApplicationEvents 拖到“表格B”上

ApplicationEvents1 OnDeactivate 事件中,添加以下内容:

SetForegroundWindow(Handle);

当我的主要表单正在处理场外数据时,我会注意一个小的状态窗口。做工精美!