Как правильно добавить файл ресурса (* .res) в пакет с компонентами? - PullRequest
3 голосов
/ 26 июля 2011

У меня есть набор моих собственных компонентов Delphi в одном файле .dpk. Один из моих компонентов нуждается в распространении некоторых изображений вместе с ним. Я создал файл RES (пусть это будет «MyImages.RES») и хочу, чтобы мой визуальный компонент загружал его содержимое при создании.

Как правильно добавить этот файл RES в DPK?

Когда я помещаю {$ R 'MyImages.RES'} в мой файл .dpk, TResourceStream не удается создать, потому что он не может найти мою картинку по имени ресурса:

constructor TMyComponent.Create(AOwner: TComponent);
begin
  S := TResourceStream.Create(HInstance, 'MY_PICTURE1', RT_RCDATA);

файл RES был создан этим RC:

MY_PICTURE1 RCDATA "my_picture1.png"

Ответы [ 2 ]

7 голосов
/ 26 июля 2011

Используйте директиву {$R 'MyImages.res'} непосредственно в модуле, где объявлен ваш компонент. При загрузке ресурса используйте FindClassHInstance(TMyComponent) (модуль, где TMyComponent) вместо HInstance (основной исполняемый файл - это может совпадать также с модулем, где TMyComponent, в зависимости от того, как вы связываете).

Редактировать: Кажется, вы хотите связать с пакетами времени выполнения, но на самом деле вы статически связываете компонент с основным исполняемым файлом. По-видимому, вы уже скомпилировали ваши пакеты времени выполнения (и времени разработки) .bpl. Чтобы скомпилировать ваш основной проект (.exe или .dll), который использует компонент с пакетами времени выполнения, вам необходимо:

  1. выберите "Построить с помощью пакетов времени выполнения" в параметрах проекта
  2. добавьте базовое имя вашего пакета в список пакетов времени выполнения в параметрах проекта.
1 голос
/ 26 июля 2011

Из комментариев к вашему вопросу ясно, что вы неправильно связываетесь с пакетом во время выполнения и TMyComponent статически связан с исполняемым файлом, а не динамически связан с пакетом.

Вырешить эту проблему можно одним из двух способов:

  1. Исправить проблемы со связыванием, чтобы вы действительно связывались с пакетом во время выполнения.Это настроено в Project |Варианты |Пакеты в Delphi IDE.
  2. Если вы хотите связать статически, то вам также нужно связать файл .res с исполняемым файлом.Ответ @ TOndrej дает аккуратный способ устроить это.
...