How to remove the top bar from a resizable form on Windows 10?
Asked Answered
D

4

7

I am trying to remove title-bar of a form while keeping the border to have a resizable form. I set the BorderStyle to bsNone and override the CreateParams procedure:

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

The only issue I am facing is a white bar on top edge of the form (in win 10):

screenshot

How can I get rid of this white bar?

Dorkas answered 22/10, 2017 at 12:7 Comment(7)
I need WS_THICKFRAME to me the form resizable.Dorkas
Setting the border style to bsNone makes the window not resizable. Explore the bsToolWindow and bsSizeToolWin alternatives. Going down the WinAPI route can prove to be a lot of work.Deathless
And the form can be moved as well, right?Notecase
Yes, but moving the form is straight forward using WMNCHitTest. My problem is the white bar at top edge.Dorkas
@Ron: bsToolWindow or bsSizeToolWin won't remove the tilebar.Dorkas
Have you considered handling WM_NCPAINT and possibly WM_NCACTIVATE messages, painting the border the same color as your client area bg? I haven't tried with Win 10 (and can't do so right now)Painless
It's been a while since you asked that but I created a repository with a solution without VCLStyles... Take a look on my repository and if you want I opened a question here tooRambouillet
N
6

Going the win API way will consume a lot of time and can prove to be so hard. If you are willing to go that way I strongly recommend it. But for the current time here is a quick work around to your problem.

Use the VCL Styles by changing the style of the title bar like this

go to Tools-> Bitmap Style Manager and reopen the Windows 10 style (since you want this in windows 10)

Go to Objects-> form->title and change the height to 5.

in your IDE's object inspector uncheck the border Icons and set the caption to ' '.

The result will be a form with a title bar that is so thin, it is a border.

enter image description here

You can further modify the look of the title bar so it looks exactly like the borders.

and see this Vcl.Forms.TFormStyleHook.PaintNC to know exactly how this is done using style Hooks.

Notecase answered 22/10, 2017 at 18:27 Comment(0)
A
2

In Delphi 11, and possibly earlier, you can create a resizable form without a title bar by using the form's CustomTitleBar property:

Enabled=true
Height=0
ShowCaption=false
ShowIcon=false
SystemButtons=false
SystemColors=false
SystemHeight=false

Form.BorderStyle=bsSizeable
Aemia answered 16/4, 2022 at 17:59 Comment(0)
M
-1

It is not handled by Delphi on Windows 10! You must use a tweak tool to control the border size inside windows. I used winaero (www.winaero.com) and reduce the window border to 1 and padding to zero. enter image description here

Mazard answered 25/7, 2018 at 17:24 Comment(0)
S
-1

for firemonkey (fmx) users: You can do this via styles.

Samons answered 10/3, 2021 at 14:20 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.