如何在Windows 10上从可调整大小的窗体中移除顶部栏?

7

我想在保持可调整大小的窗体边框的同时,去除窗体的标题栏。我将 BorderStyle 设置为 bsNone 并重写了 CreateParams 过程:

procedure TMainForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := Params.Style or  WS_BORDER or WS_THICKFRAME;
end;

我所遇到的唯一问题是在表单顶部有一个白色横条(在win10上):

screenshot

我该如何消除这个白色横条?

我需要使用WS_THICKFRAME使窗体可以调整大小。 - ReA
{btsdaf} - Ron
表单也可以移动,对吧? - Nasreddine Galfout
是的,但使用WMNCHitTest移动窗体很简单。我的问题是顶部边缘的白色条。 - ReA
自从你提出这个问题以来已经有一段时间了,但我创建了一个没有使用 VCLStyles 解决方案的存储库...请查看 我的存储库,如果你想的话我也在这里提出了一个问题 - Matheus Miranda
显示剩余2条评论
4个回答

6
使用win API的方法会消耗很多时间,并且可能会非常困难。如果您愿意采用这种方式,我强烈推荐它。但是在当前情况下,以下是解决问题的快速方法。
通过更改标题栏的样式来使用VCL Styles,具体操作如下:
进入工具->位图样式管理器并重新打开Windows 10样式(因为您想要在Windows 10中实现这个)。
转到对象->表单->标题并将高度更改为5。
在IDE的对象检查器中取消勾选边框图标并将标题设置为' '
结果将是一个标题栏非常细小的窗体,就像一个边框一样。

enter image description here

你可以进一步修改标题栏的外观,使其看起来与边框完全相同。
并查看此 Vcl.Forms.TFormStyleHook.PaintNC 以了解如何使用样式钩子完成此操作。

1
在Delphi 11及之前的版本中,您可以使用窗体的CustomTitleBar属性创建一个没有标题栏且可调整大小的窗体:
Enabled=true
Height=0
ShowCaption=false
ShowIcon=false
SystemButtons=false
SystemColors=false
SystemHeight=false

Form.BorderStyle=bsSizeable

-1

在 Windows 10 上,Delphi 无法处理这个问题! 您必须使用一个调整工具来控制窗口内部的边框大小。 我使用了 winaero (www.winaero.com) 并将窗口边框和内边距都设置为1像素。 输入图像描述


-1

对于FireMonkey(FMX)用户:您可以通过样式来实现此操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接