Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исправление ошибки в `SystemParametersInfo` для изменения шрифта заголовков значков в Windows 7

Delphi , ОС и Железо , Windows

Исправление ошибки в 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




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


:: Главная :: Windows ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 11:39:07/0.0035660266876221/0