Ресурсы в DLL

Динамические библиотеки могут содержать не только исполняемый код, проводящий некоторые вычисления, но и ресурсы. Чаще всего бывает необходимо распространять вместе с DLL формы, обеспечивающие работу процедур и функций. Приемы работы с формами в проектах динамических библиотек ничем не отличаются от тех же приемов в проектах обычных приложений.

Единственная особенность заключается в том, что любая форма в DLL должна рассматриваться как создаваемая вручную, а не автоматически. При этом в процедуру, создающую форму, должен быть передан указатель на владельца будущей формы.

Например, процедура showDemoForm из рассматриваемой нами библиотеки DataCheck, выглядит так:

procedure ShowDemoForm(AOwner: TComponent); 

begin

DemoForm := TDemoForm.Create(AOwner);

DemoForm.ShowModal;

DemoForm.Free; 

end;

Уничтожение формы можно организовать не только в самой процедуре, но и (при неоднократном применении) в другой процедуре или при выгрузке динамической библиотеки.

При вызове этой процедуры из приложения в параметре необходимо указать экземпляр класса приложения:

procedure ShowDemoForm(AOwner: TComponent); external 'DataCtrl.dll';

procedure TMainForm.BitBtnlClick(Sender: TObject); 

begin

ShowDemoForm(Application);

  end;

Обратите внимание, что в данном случае форма из динамической библиотеки рассматривается операционной системой как отдельная задача, о чем свидетельствует системная панель задач.

Для распространения с приложением можно создавать специальные динамические библиотеки ресурсов, которые используются для локализации приложений. Например, в библиотеку ресурсов можно вынести все строковые константы (сообщения, тексты и т. д.), а с приложением распространять динамическую библиотеку ресурсов, строки в которой соответствуют языковым запросам заказчика.

Создать такую библиотеку можно, использовав Репозиторий Delphi (страница New) для проекта приложения или динамической библиотеки. Мастер создания библиотеки ресурсов проводит разработчика через все этапы создания проекта библиотеки.

Примечание

Для каждого языка необходимо создавать свои варианты форм и новый проект библиотеки ресурсов.

Перед началом создания проекта библиотеки ресурсов необходимо сохранить и откомпилировать базовый проект (для него создается проект локализации), а затем начать новый проект библиотеки ресурсов.

Первый диалог мастера библиотеки ресурсов предоставляет справочную информацию.

Второй — позволяет создать список форм базового проекта, которые войдут в библиотеку (рис. 28.2). При этом можно удалить из списка ненужные формы и добавить необходимые из других проектов.

Рис. 28.2. Диалог мастера библиотеки ресурсов со списком форм, включаемых в проект

После этого в третьем диалоге мастера необходимо выбрать один или несколько языков локализации ресурсов (рис. 28.3). От этого выбора языка зависит расширение откомпилированного файла библиотеки и алгоритм поведения базового проекта при загрузке.

Рис. 28.3. Диалог мастера библиотеки ресурсов со списком доступных языков локализации проекта

Если запускаемое приложение или DLL находит в своей папке одноименный файл с расширением, которое соответствует одной из возможных локализаций и эта локализация применяется в системе, то приложение использует ресурсы из этой библиотеки вместо собственных. Поэтому при определении имени файла библиотеки ресурсов категорически не рекомендуется изменять предложенное мастером имя.

Кроме того, папку с файлом ресурсов можно задать дополнительно. Для этого на следующей странице мастера необходимо указать нужную папку для каждого языкового ресурса или принять предложенную по умолчанию (рис. 28.4).

Затем вы можете добавить к библиотеке ресурсов собственные файлы. Это могут быть ресурсы любого рода, используемые приложением. В окне мастера (рис. 28.5) необходимо выбрать эти файлы.

В последующих диалогах мастера задается способ создания или обновления для каждого языкового ресурса и запускается процесс создания ресурса. При первоначальном создании DLL ресурсы можно только создавать, впоследствии их можно полностью перезаписывать или изменять.

По завершении работы мастера для каждого выбранного языка создается новый проект библиотеки ресурсов. Результат работы мастера выводится в информационном окне (рис. 28.6).

Рис. 28.4. Диалог мастера библиотеки ресурсов со списком папок для ресурсов локализации проекта

Рис. 28.5. Диалог мастера библиотеки ресурсов для включения в проект дополнительных файлов

Рис. 28.6. Окно с информацией о результате создания ресурса

Каждый созданный проект необходимо откомпилировать и включить в состав дистрибутива базового приложения.