forms - 如何让表单始终位于最前面

标签 forms delphi

我有一个应用程序,其中包含一个 FormStyle 声明为“fsStayOnTop”的表单,因此它始终显示在所有其他窗口的顶部。现在我想暂时显示另一个表单,用户可以在其中设置一些设置。该表单也应该显示在顶部,因此我将主表单的 FormStyle 属性更改为“fsNormal”,并将要显示的表单的 FormStyle 更改为“fsStayOnTop”。当临时表单关闭时,主表单再次获得“fsStayOnTop”。

现在,设置表单保留在顶部,但只有在我通过在表单内单击鼠标将其激活为止。之后当我单击另一个窗口时,单击的表单位于顶部,并且定义的 FormStyle 似乎不再有效。谁能帮我解决这个问题吗?

这是我的 FormShow 和 FormClose 方法:

procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ScaleOpen := false;
  SetForegroundWindow(TempHandle);
  Form1.FormStyle := fsStayOnTop;
end;


procedure TForm3.FormShow(Sender: TObject);
begin
  TempHandle := GetForegroundWindow;
  OldScaleM := Form1.GetScale;
  SaveChanges := False;
  ScaleOpen := true;
  Form1.FormStyle := fsNormal;
  Form3.FormStyle := fsStayOnTop;
end;

最佳答案

您可以使用以下代码将表单设置为“始终位于顶部”状态:

        SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0,
                     SWP_NoMove or SWP_NoSize);

使用以下代码返回正常模式:

        SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0,
                     SWP_NoMove or SWP_NoSize);

要尝试一下,只需在表单上放置两个按钮并将上述代码关联到它们各自的 OnClick 处理程序即可。

关于forms - 如何让表单始终位于最前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30070603/

相关文章:

javascript - 在表单中提交表单

forms - 如何向静态网站添加联系表单?

c# - 当用户在窗体窗口外单击时如何关闭窗体?

java - 如何使用 AngularJS 提交选项和文本输入表单

delphi - 有没有更好的方法在 Delphi .pas 源文件中添加许可/版权 header ?

delphi - 为什么枚举类型会出现 "type has no typeinfo"错误

css - Twitter Bootstrap - 无法正确显示表单

delphi - 右对齐delphi stringgrid列但保持主题绘图样式

delphi - 访问单选按钮会引发异常

delphi - TThread 不释放句柄