-
Ресурсы
в 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);
-
|