Как удалить верхнюю панель из изменяемого размера формы в Windows 10?

Я пытаюсь удалить строку заголовка формы, сохраняя при этом границу для изменения размера формы. Я установил BorderStyle в bsNone и переопределить CreateParams процедура:

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

Единственная проблема, с которой я сталкиваюсь, это белая полоса на верхнем краю формы (в победе 10):

Скриншот

Как я могу избавиться от этого белого бара?

4 ответа

Решение

Переход на API win займет много времени и может оказаться очень сложным. Если вы готовы пойти по этому пути, я настоятельно рекомендую это. Но на данный момент здесь есть быстрое решение вашей проблемы.

Используйте стили VCL, изменив стиль строки заголовка следующим образом

идти к Tools-> Bitmap Style Manager и снова откройте стиль Windows 10 (так как вы хотите это в Windows 10)

Идти к Objects-> form->title и измените высоту на 5.

в инспекторе объектов вашей IDE снимите флажок Границы иконки и установите заголовок ' ',

Результатом будет форма с такой тонкой полосой заголовка, как граница.

Вы можете дополнительно изменить внешний вид строки заголовка, чтобы она выглядела в точности как границы.

и увидеть это Vcl.Forms.TFormStyleHook.PaintNC точно знать, как это делается с помощью стиля Hooks.

В Delphi 11 и, возможно, более ранних версиях можно создать форму с изменяемым размером без строки заголовка, используя свойство формы CustomTitleBar :

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

Form.BorderStyle=bsSizeable

Это не обрабатывается Delphi на Windows 10! Вы должны использовать инструмент для настройки размера границы внутри окон. Я использовал winaero (www.winaero.com) и уменьшил границу окна до 1, а отступ до нуля.

для пользователей firemonkey (fmx): вы можете сделать это с помощью стилей.

Другие вопросы по тегам