我有一个使用我自己的气球表格的应用程序。这是一种无边框的 fsStayOnTop 类表单。
我用这段代码展示它:
ShowWindow(Handle, SW_SHOWNOACTIVATE);
Visible := True;
今天我意识到,如果我激活另一个应用程序,那么气球就不会出现!所以它失去了保持顶级风格。
环境:Win7/x64 Delphi 6 Professional
我能用它做什么?
谢谢:dd
过去在与保持领先的形式作斗争时对我有用的东西:
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
文档说我们应该调用的调用(因此应用程序中的其他停留在顶部的窗口将受到影响)。所以可能会有更好的解决方案。
我尝试了上述解决方案,但它不适用于辅助表单。我相信它适用于主要形式,但不适用于次要形式。但是,我确实找到了一种适用于辅助表单的解决方案,这听起来就像原始海报想要的那样,因为“气球表单”通常是一个弹出窗口。
把它放在“Form B”的 OnCreate 事件中:
FormStyle:= fsStayOnTop;
但仅此还不够……
将TApplicationEvents拖到您的“Form B”上
在ApplicationEvents1的OnDeactivate事件中,添加以下内容:
SetForegroundWindow(句柄);
当我的主要表单正在处理站点外的数据时,我会留意一个小的状态窗口。工作精美!