Как программно спрятать или показать заголовок окна TitleBar
procedure TForm1.HideTitlebar;
var
Save: Longint;
beginif BorderStyle=bsNone then
Exit;
Save:=GetWindowLong(Handle, GWL_STYLE);
if (Save and WS_CAPTION)=WS_CAPTION thenbegincase BorderStyle of
bsSingle, bsSizeable:
SetWindowLong(Handle, GWL_STYLE, Save and (not WS_CAPTION) or WS_BORDER);
bsDialog:
SetWindowLong(Handle, GWL_STYLE, Save and
(not WS_CAPTION) or DS_MODALFRAME or WS_DLGFRAME);
end;
Height:=Height-GetSystemMetrics(SM_CYCAPTION);
Refresh;
end;
end;
procedure TForm1.ShowTitlebar;
var
Save: Longint;
beginif BorderStyle=bsNone then
Exit;
Save:=GetWindowLong(Handle, GWL_STYLE);
if (Save and WS_CAPTION)<>WS_CAPTION thenbegincase BorderStyle of
bsSingle, bsSizeable:
SetWindowLong(Handle, GWL_STYLE, Save or WS_CAPTION or WS_BORDER);
bsDialog:
SetWindowLong(Handle, GWL_STYLE, Save or WS_CAPTION or
DS_MODALFRAME or WS_DLGFRAME);
end;
Height:=Height+getSystemMetrics(SM_CYCAPTION);
Refresh;
end;
end;
Вот перевод текста на русский язык:
Это код Delphi, который программно скрывает и отображает панель заголовка формы (окна). Вот разбивка на что каждый процедура делает:
HideTitlebar
1. Проверяет, если текущий стиль рамки равен bsNone, то выходит из процедуры.
2. Сохраняет текущий стиль окна с помощью GetWindowLong с параметром GWL_STYLE.
3. Проверяет, если сохраненный стиль окна имеет флаг WS_ CAPTION, указывающий на присутствие панели заголовка.
4. Если панель заголовка есть и стиль рамки равен либо bsSingle, либо bsSizeable, то устанавливает стиль окна, удаляя флаг WS_ CAPTION и добавляя флаг WS_BORDER.
5. Если стиль рамки равен bsDialog, то устанавливает стиль окна, удаляя флаг WS_ CAPTION, добавляя флаг DS_MODALFRAME (для диалогового поведения) и оставляя флаг WS_DLGFRAME (для рамки диалога).
6. Обновляет высоту формы, вычитывая высоту панели заголовка с помощью GetSystemMetrics(SM_CYCAPTION).
7. Вызывает Refresh, чтобы обновить окно.
ShowTitlebar
1. Проверяет, если текущий стиль рамки равен bsNone, то выходит из процедуры.
2. Сохраняет текущий стиль окна с помощью GetWindowLong с параметром GWL_STYLE.
3. Проверяет, если сохраненный стиль окна не имеет флага WS_CAPTION, указывающего на отсутствие панели заголовка.
4. Если панель заголовка отсутствует и стиль рамки равен либо bsSingle, либо bsSizeable, то устанавливает стиль окна, добавляя флаг WS_CAPTION и оставляя флаг WS_BORDER.
5. Если стиль рамки равен bsDialog, то устанавливает стиль окна, добавляя флаг WS_CAPTION, оставляя флаг DS_MODALFRAME (для диалогового поведения) и оставляя флаг WS_DLGFRAME (для рамки диалога).
6. Обновляет высоту формы, добавляя высоту панели заголовка с помощью GetSystemMetrics(SM_CYCAPTION).
7. Вызывает Refresh, чтобы обновить окно.
Обратите внимание, что эти процедуры работают только в том случае, если стиль рамки не установлен в bsNone. Кроме того, они не влияют на видимость панели заголовка сразу; вам нужно вызвать Refresh или InvalidateRect (или эквивалент) для обеспечения изменения эффекта.
Альтернативное решение может быть использование свойства TFormBorderStyle и установкой его в значение либо fsNone (скрытие панели заголовка), либо другое значение (отображение панели заголовка). Этот подход проще и более прямолинейный, чем использование GetWindowLong и SetWindowLong. Однако данный код предоставляет более тонкую настройку поведения панели заголовка.
В статье описывается способ программного изменения или скрытия заголовка окна TitleBar в Delphi, используя процедуры HideTitlebar и ShowTitlebar.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.