Это библиотека/компоненты для работы векторными шрифтами вроде FontAwesome и преобразованием их без потери качества в TImage и TImageList. Однако при компиляции пакета получаем ошибку «Can’t load package IconFontsImageList$(Auto).bpl». Установка библиотеки IconFontsImageList не получается.

Используется Delphi 10.4, библиотека скачана с гитхаба, самый свежий релиз 3.3.3 от 15 сентября 2024 года. Особых инструкций по установке нет, всё стандартно, компилируем real-time, install — design time. В проекте 4 пакета, для VCL и FMX соответственно. Пути настроены, но библиотека упорно не собирается.

Почему не собирается библиотека?

Окей, берём утилиту Process Monitor (Sysinternals), настраиваем фильтр вот так:

Настройка Process Monitor для фильтрации, какие файлы будет открывать IDE Embarcadero Delphi

Нажимаем кнопку «Add», закрываем окно кнопкой «Ок», а затем кнопку «Capture» (Ctrl+E) на панели инструментов. После этого переключаемся на IDE Delphi и пытаемся сделать build для библиотеки. Получаем ошибку, переключаемся в Process Monitor, останавливаем процесс сбора данных (Ctrl+E) и смотрим результат в самом низу (свежие события добавляются в конец списка):

Результат работы Process Monitor, файл IconFontsImageList$(Auto).bpl не существует

Видим, что IDE Delphi пытается создать файл с названием «IconFontsImageList$(Auto).bpl», здесь явно что-то не то, потому что по этому пути такого файла нет, но зато есть «IconFontsImageList270.bpl».

Что это за $(Auto) в названии BPL-файла библиотеки?

Начиная с Delphi 10.4 компания Embarcadero добавила переменную окружения $(Auto), которая используется для версионирования сборок библиотек. Вдруг у вас на компьютере несколько версий Delphi, а значит, несколько версий одних и тех же библиотек. Обычно собранные версии лежат в одной папке по умолчанию.

Идея в том, чтобы вместо этой переменной поставлять номер версии компилятора в название пакета в качестве суффикса. Чтобы они не конфликтовали друг с другом. Например:

«270» для Delphi 10.4
«280» для Delphi 11

Красиво, но в Delphi 10.4 есть какой-то баг, и это не работает 🙂

Как исправить проблему и собрать библиотеку IconFontsImageList?

  1. Закройте файл группы проекта («File», «Close All»).
  2. Отредактируйте все *.dpk файлы в папке \Packages\D10_4\ и закомментируйте строку {{$LIBSUFFIX AUTO} (просто поставьте фигурную скобку { в начале строки).
  3. Отредактируйте все *.dproj файлы в папке \Packages\D10_4\ и удалите оттуда строку <DllSuffix>$(Auto)</DllSuffix>
  4. Теперь откройте в Delphi «File», «Open Project» (Ctrl+F11) файл проекта \Packages\D10_4\IconFontsImageGroupPackages.groupproj и сделайте сначала build а затем install для design-time библиотек VCL и FMX.

После этих «танцев с бубном» библиотека соберётся, компоненты установятся и пример заработает:

Пример работы с векторными шрифтами типа Font Awesome, как с изображениями в Delphi

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *