我有一个使用我自己的气球表格的应用程序。 这是一种无边界的fsStayOnTop形式。
我用这段代码显示:
ShowWindow(Handle, SW_SHOWNOACTIVATE);
Visible := True;
今天我意识到,如果我激活另一个应用程序,那么气球就不会出现了! 所以它正在失去它的顶级风格。
环境: Win7的/ 64 德尔福6专业版
我可以用它做什么?
感谢: DD
答案 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);
当我的主要表单正在处理场外数据时,我会注意一个小的状态窗口。做工精美!