function GetMenuFont: TFont;
var
ncm: TNonClientMetrics;
begin
ncm.cbSize := SizeOf(TNonClientMetrics);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, SizeOf(TNonClientMetrics), @ncm, 0);
Result := TFont.Create;
{
lfCaptionFont - regular captions
lfSmCaptionFont - small captions
lfMenuFont - menus
lfStatusFont - status bars
lfMessageFont - message boxes
}
Result.Handle := CreateFontIndirect(ncm.lfCaptionFont);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption := GetMenuFont.Name;
end;
Here's the translation of the text into Russian:
Данный код используется для извлечения шрифта, используемого системным меню, и отображения его в лейбле.
Работает следующим образом:
Определена функция GetMenuFont, которая возвращает объект TFont.
Внутри этой функции объявляется переменная ncm типа TNonClientMetrics и инициализируется размером TNonClientMetrics.
Вызывается функция SystemParametersInfo, чтобы извлечь метрики системного меню (например, размеры шрифтов для меню, заголовков и т.д.). Эта функция используется для получения текущего состояния различных параметров системы.
Создается новый объект TFont с именем Result, а затем его handle устанавливается с помощью функции CreateFontIndirect с информацией о шрифте, полученной из ncm.lfCaptionFont. Эта информация соответствует регулярным заголовкам в системном меню.
В процедуре Button1Click, когда кнопка нажата, она вызывает функцию GetMenuFont и затем устанавливает текст лейбла с именем label1 в имя извлеченного шрифта.
Альтернативное решение:
function GetMenuFont: TFont;
var
ncm: TNonClientMetrics;
begin
ncm.cbSize := SizeOf(TNonClientMetrics);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, SizeOf(TNonClientMetrics), @ncm, 0);
Result := TFont.Create;
Result.Assign(CreateFontIndirect(LOWORD(ncm.lfCaptionFont)));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption := GetMenuFont.Name + ' (' + IntToStr(GetMenuFont.Size) + ')';
end;
В этом альтернативном решении функция GetMenuFont модифицируется для прямого присваивания созданного шрифта с помощью CreateFontIndirect переменной Result. Процедура Button1Click также модифицируется для отображения как имени, так и размера извлеченного шрифта в тексте лейбла.
Получить шрифт системного меню - функция на Delphi, которая возвращает шрифт системного меню и отображает его в лейбле при нажатии кнопки.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS