procedure TForm1.HideTitlebar;
var
Style: Longint;
beginif BorderStyle = bsNone then Exit;
Style := GetWindowLong(Handle, GWL_STYLE);
if (Style and WS_CAPTION) = WS_CAPTION thenbegincase BorderStyle of
bsSingle,
bsSizeable: SetWindowLong(Handle, GWL_STYLE, Style and
(not (WS_CAPTION)) or WS_BORDER);
bsDialog: SetWindowLong(Handle, GWL_STYLE, Style and
(not (WS_CAPTION)) or DS_MODALFRAME or WS_DLGFRAME);
end;
Height := Height - GetSystemMetrics(SM_CYCAPTION);
Refresh;
end;
end;
procedure TForm1.ShowTitlebar;
var
Style: Longint;
beginif BorderStyle = bsNone then Exit;
Style := GetWindowLong(Handle, GWL_STYLE);
if (Style and WS_CAPTION) <> WS_CAPTION thenbegincase BorderStyle of
bsSingle,
bsSizeable: SetWindowLong(Handle, GWL_STYLE, Style or WS_CAPTION or
WS_BORDER);
bsDialog: SetWindowLong(Handle, GWL_STYLE,
Style or WS_CAPTION or DS_MODALFRAME or WS_DLGFRAME);
end;
Height := Height + GetSystemMetrics(SM_CYCAPTION);
Refresh;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
HideTitlebar;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowTitlebar;
end;
Перевод контента на русский язык:
В предоставленном коде Delphi используется для скрытия или отображения заголовка формы в зависимости от значения свойства BorderStyle. Заголовок можно скрыть, установив стиль границы в bsNone, а затем снова отобразить, изменяя стиль границы обратно на один из других значений (bsSingle, bsSizeable или bsDialog).
Работа кода происходит следующим образом:
Когда форма создается впервые, ее заголовок виден.
Когда пользователь кликает по кнопке 1, вызывается процедура HideTitlebar. Эта процедура проверяет, не равно ли значение стиля границы bsNone. Если это так, то она скрывает заголовок, изменяя стиль окна и корректируя высоту формы.
Когда пользователь кликает по кнопке 2, вызывается процедура ShowTitlebar. Эта процедура проверяет, не равно ли значение стиля границы bsNone. Если это так, то она отображает заголовок снова, изменяя стиль окна обратно к его оригинальному значению и корректируя высоту формы.
Некоторые предложения по улучшению кода:
Вместо использования двух отдельных процедур (HideTitlebar и ShowTitlebar), которые выполняют практически то же самое, но с разными условиями, можно создать одну процедуру, которая проверяет, равно ли значение стиля границы bsNone, и выполняет соответствующие действия. Это сделает ваш код более компактным и проще для обслуживания.
Вам может потребоваться добавить ошибку проверки, чтобы убедиться, что handle формы является валидным перед попыткой изменить стиль окна или корректировать высоту формы.
procedureTForm1.ChangeTitlebarVisibility;beginifBorderStyle=bsNonethenbeginHeight:=Height+GetSystemMetrics(SM_CYCAPTION);Refresh;endelsebeginStyle:=GetWindowLong(Handle,GWL_STYLE);caseBorderStyleofbsSingle,bsSizeable:SetWindowLong(Handle,GWL_STYLE,Styleand(notWS_CAPTION)orWS_BORDER);bsDialog:SetWindowLong(Handle,GWL_STYLE,Styleand(notWS_CAPTION)orDS_MODALFRAMEorWS_DLGFRAME);end;Height:=Height-GetSystemMetrics(SM_CYCAPTION);Refresh;end;end;procedureTForm1.Button1Click(Sender:TObject);beginBorderStyle:=bsNone;ChangeTitlebarVisibility;end;procedureTForm1.Button2Click(Sender:TObject);beginBorderStyle:=bsSingle; // или любым другим стилем границы, который вы хотите использоватьChangeTitlebarVisibility;end;
В этом коде создается одна процедура ChangeTitlebarVisibility, которая проверяет, равно ли значение стиля границы bsNone, и выполняет соответствующие действия. Кнопочные события теперь просто изменяют стиль границы и вызывают эту новую процедуру, что делает ваш код более компактным и проще для обслуживания.
Статья посвящена созданию процедур для скрытия и отображения панели заголовка в приложении Delphi, а также примерам использования этих процедур на практике.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.