【问题标题】:How to make a form always stay on top如何使表单始终保持在最前面
【发布时间】:2018-09-28 01:50:09
【问题描述】:

我有一个应用程序,它由一个 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;

【问题讨论】:

  • 您是否验证过“FormStyle 似乎没有效果”时确实是fsStayOnTop 而不是别的东西?
  • 当你想显示你的设置表单时需要使用ShowModal...
  • 是的,我使用 showModal 来展示它
  • @Airogat 如果您将设置表单显示为模态表单,那么您不需要更改主表单的表单样式,因为带有fsStayOnTop 的模态表单总是放置在任何普通表单之上,即使你它的风格是fsStayOnTop
  • 您接受的解决方案肯定是解决问题的错误方法。目前尚不清楚您是否真的想深入了解。

标签: forms delphi


【解决方案1】:

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

        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 处理程序。

【讨论】:

    猜你喜欢
    • 2011-02-07
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    相关资源
    最近更新 更多