11

 

 

 

Статьи

-
Ресурсы в DLL

Локализация

Иногда необходимо хранить ресурсы не в файле приложения, а в специальной библиотеке. Это может быть полезно при локализации программы. Ничего не стоит подменить библиотеку другой. Все это предоставляет нам Delphi Resource DLL.

В Delphi 5 это можно сделать при помощи Resource DLL Wizard. Он позволит провести локализацию на все языки мира, правда переводить придется вам. После ответов на некоторые вопросы и грамотного вашего перевода в каталоге проекта создается файл с расширением RUS.

На самом деле это не, что иное как обычная DLL с ресурсами. Ваша программа при запуске проверяет язык по умолчанию и после этого ищет в своей директории файл с соответствующим расширением (русский-RUS, английский-ENG и т.д.).

Картинки в DLL

Но иногда требуется держать картинки в виде ресурса в dll и по мере надобности извлекать их оттуда.
Расмотрим поэтапноую реализацию этой идеи.

Создадим библиотеку

{pr.dpr}
library pr;

{$R pr.res}
begin

end.

Далее создаем файл ресурс. Можно воспользоваться графическим редактором посталяемым с Delphi. Но мы будем использовать уже готовые битмапы. Создадим текстовый файл с расширением *.rc. Назовем его "pr.rc".

111 BITMAP "se.bmp"

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

Откомпилируйте его компилятором ресурсов.
brcc32.exe pr.rc

У нас появился файл с темже именем, но с расширением RES. Файл pr.res.

Далее можно использовать нашу DLLку в проектах.Надо лишь включить туда этот код.

var h,r:cardinal;
begin
h:=LoadLibraryA('pr.dll');
r:=LoadBitmap(h,MAKEINTRESOURCE(111));
Image1.Picture.Bitmap.Handle:=r;
FreeLibrary(h);
end;

На форме располагается компонентImage. В нем мы будем отображать битмап.

{Сначала посредством функции winapi загрузим нашу библиотеку}
h:=LoadLibraryA('pr.dll');

{Потом загружаем сам ресурс}
r:=LoadBitmap(h,MAKEINTRESOURCE(111));

{Передаем дескриптор ресурса свойству компонента Image1.Picture.Bitmap.Handler}
Image1.Picture.Bitmap.Handle:=r;

{Ну и наконец надо освободить память от библиотеки}
FreeLibrary(h);

-








 
 

Copyright © Pascal 2000 - 2002
Дизайн: Понидилок Андрей

 








Hosted by uCoz