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

Исправление отображения иконок `.ico` 48x48 с прозрачностью в программах на Delphi

Delphi , Графика и Игры , Изображения

Исправление отображения иконок .ico 48x48 с прозрачностью в программах на Delphi

При разработке программ на Delphi часто возникают вопросы, связанные с отображением иконок в пользовательском интерфейсе. Одной из таких проблем является корректное отображение иконок формата .ico размером 48x48 с поддержанием прозрачности. В данной статье мы рассмотрим, как решить эту проблему, опираясь на примеры кода на Object Pascal.

Проблема

Пользователь столкнулся с проблемой при отображении иконок размером 48x48 в всплывающем меню. При установке свойства BkColor в значение clNone иконки отображаются неэстетично, а при использовании ClMenu при выделении иконки появляется серый фон.

Решение

Чтобы решить данную проблему, необходимо учитывать следующие моменты:

A) Использование функции LoadImage для иконок большего размера, чем 32x32.

B) Создание 32-битного ImageList с помощью функции ImageList_Create во время выполнения программы для поддержки альфа-прозрачности.

C) Использование функции LoadIcon из ресурсов вместо использования ImageList в дизайнере.

D) Для устранения неэстетичного черного края вокруг иконки, следует использовать comctl32.dll версии 6 для включения стилей визуализации с плавными краями. Это достигается путем создания файла xxx.exe.manifest с указанным содержимым.

E) Присваивание команд может привести к появлению неэстетичного белого края вокруг иконок. Лучше использовать цикл For и функцию ImageList_ReplaceIcon.

Ниже представлен пример кода, который демонстрирует, как можно решить описанные проблемы:

procedure TForm1.LoadICO;
var
   i: Integer;
   h: HIcon;
   folder: string;
   filename: string;
begin
   folder := GetCurrentDir + '\icon\';

   // Создание 32-битного ImageList для поддержки альфа-прозрачности
   ImageList1.Handle := ImageList_Create(48, 48, ILC_COLOR32 or ILC_MASK, 0, ImageList1.AllocBy);

   // Загрузка иконок из файлов
   for i := 0 to ImageCount - 1 do
   begin
      filename := folder + ParamStr(i + 1);
      if FileExists(filename) then
         h := LoadImage(0, PChar(filename), IMAGE_ICON, 48, 48, LR_LOADFROMFILE)
      else
         h := LoadIcon(hInstance, 'ICO1'); // Загрузка иконки из ресурсов
      ImageList_AddIcon(ImageList1.Handle, h); // Добавление иконки в ImageList
      DeleteObject(h);
   end;
end;

Важно также создать файл xxx.exe.manifest с контентом, который позволит использовать стили визуализации из comctl32.dll версии 6:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        processorArchitecture="*"
        publicKeyToken="6595b64144ccf1df"
        language="*"
      />
    </dependentAssembly>
  </dependency>
</assembly>

Эти шаги позволят корректно отображать иконки .ico 48x48 с прозрачностью в программах на Delphi.

Создано по материалам из источника по ссылке.

В статье рассматривается проблема корректного отображения иконок формата `.ico` размером 48x48 с поддержкой прозрачности в программах на Delphi, с предложением решений, включая использование определенных функций и создание специального файла `.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Изображения ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-20 22:33:04/0.0036861896514893/0