Исправление ошибки в SystemParametersInfo для изменения шрифта заголовков значков в Windows 7
Пользователь столкнулся с проблемой, при которой функция SystemParametersInfo с параметром SPI_GETICONTITLELOGFONT всегда возвращала шрифт 'Segoe UI', даже после изменения системного шрифта на 'VivladiD' в операционной системе Windows 7. Вопрос заключался в том, действительно ли функция возвращает только системный шрифт по умолчанию, или же проблема кроется в самой функции SystemParametersInfo.
Описание проблемы
Функция SystemParametersInfo с параметром SPI_GETICONTITLELOGFONT предназначена для получения логической информации о шрифте текущего шрифта заголовков значков. Однако, несмотря на изменения в настройках системы, шрифт оставался 'Segoe UI'. Пользователь предоставил пример кода, который пытается получить информацию о шрифте.
Контекст и решение проблемы
В контексте обсуждения было предложено несколько альтернативных ответов. Один из пользователей предположил, что возможно была изменена не та шрифтовая настройка в меню персонализации. Другой участник предоставил рабочий код, который корректно отображает шрифт, выбранный в меню персонализации. В третьем сообщении приводится рабочий пример программы на Delphi, которая изменяет и считывает шрифт значков, что подтверждает работоспособность функции SystemParametersInfo после корректного изменения шрифта в настройках системы.
Подтвержденный ответ
Проблема не в коде пользователя, а в правильности изменения шрифта в настройках операционной системы. Для корректной работы с функцией SystemParametersInfo необходимо убедиться, что шрифт для заголовков значков действительно изменен в меню персонализации.
Пример кода
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
procedure GetUserFontPreference(out FaceName: string; out PixelHeight: Integer);
var
lf: LOGFONT;
begin
ZeroMemory(@lf, SizeOf(lf));
if SystemParametersInfo(SPI_GETICONTITLELOGFONT, SizeOf(lf), @lf, 0) then
begin
FaceName := lf.lfFaceName;
PixelHeight := lf.lfHeight;
end
else
begin
// Если не удалось получить информацию, используем стандартные настройки
FaceName := 'MS Shell Dlg 2';
PixelHeight := 8;
end;
end;
procedure SetUserFontPreference(const AFaceName: string; const APixelHeight: Integer);
var
lf: LOGFONT;
begin
ZeroMemory(@lf, SizeOf(lf));
MoveStr(AFaceName, lf.lfFaceName, Length(AFaceName));
lf.lfHeight := APixelHeight;
SystemParametersInfo(SPI_SETICONTITLELOGFONT, SizeOf(lf), @lf, SPIF_SENTTODESKTOP);
end;
procedure Test;
var
FontName, NewFontName, OldFontName: string;
FontHeight: Integer;
begin
GetUserFontPreference(OldFontName, FontHeight);
Writeln('Текущий (старый) шрифт: ', OldFontName);
Readln;
NewFontName := 'VivladiD'; // Выберите нужный шрифт
SetUserFontPreference(NewFontName, FontHeight);
GetUserFontPreference(FontName, FontHeight);
Writeln('Текущий (новый) шрифт: ', FontName);
Readln;
SetUserFontPreference(OldFontName, FontHeight); // Восстановление старого шрифта
GetUserFontPreference(FontName, FontHeight);
Writeln('Шрифт вернулся к (старому): ', FontName);
Readln;
end;
begin
try
Test;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Заключение
Для корректной работы с шрифтами заголовков значков в Windows 7 необходимо убедиться, что шрифт был изменен в соответствующих настройках системы. Предоставленный выше код демонстрирует, как изменять и считывать шрифт, используя функции SystemParametersInfo. Важно также учитывать, что некоторые шрифты могут быть некорректно отображены при маленьком размере значков, и следует проверить, что шрифт 'VivladiD' действительно установлен и доступен в системе.
Пользователь столкнулся с проблемой, связанной с тем, что функция `SystemParametersInfo` в Windows 7 некорректно отображает изменения системного шрифта для заголовков значков, продолжая возвращать шрифт 'Segoe UI' даже после смены на 'VivladiD'.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.