4

我有一个使用我自己的气球表格的应用程序。这是一种无边框的 fsStayOnTop 类表单。

我用这段代码展示它:

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

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

环境:Win7/x64 Delphi 6 Professional

我能用它做什么?

谢谢:dd

4

2 回答 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电话。它位于所有窗口之上(你真的想要这个吗?)。此外,它感觉有点 hacky,因为它省略了RestoreTopMosts文档说我们应该调用的调用(因此应用程序中的其他停留在顶部的窗口将受到影响)。所以可能会有更好的解决方案。

于 2011-10-26T09:03:17.780 回答
0

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

把它放在“Form B”的 OnCreate 事件中:

FormStyle:= fsStayOnTop;

但仅此还不够……

TApplicationEvents拖到您的“Form B”上

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

SetForegroundWindow(句柄);

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

于 2020-08-30T04:49:17.450 回答