我有一个应用程序,其中包含一个 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/