В этой публикации я побуду Капитаном Очевидность и расскажу о паре способах добавления ресурсов в программу.
Определение: Ресурсы — данные, встроенные в EXE, DLL, CPL и (начиная с Windows Vista) MUI-файлы. Доступ к этим данным можно получить через функции Windows API. (из Википедии).
В Delphi XE5 аналогичный механизм используется и для хранения ресурсов в Android приложениях. Насчёт iOS приложений я не проверял, но полагаю, что должно работать и там.
Вообще, ресурсы в Delphi – это фундамент, на котором строится вся программа. Именно в ресурсы пакуются все ваши DFM файлы (видели же строку “{$R *.DFM}” в .pas файлах форм? это оно самое), иконки, курсоры, и строки (resourcestring). Именно благодаря ресурсам работает локализация программ с помощью Translation Manager. Всё это происходит автоматически.
Также, именно ресурсы рекомендуется использовать для встраивания в программу дополнительных файлов - картинок, аудиофайлов, текстов.
Для чтения ресурсов можно использовать класс TResourceStream. А о том, как добавить ресурсы в программу, мы и поговорим.
Начиная с Delphi 2009 в IDE появился диалог, позволяющий добавить ресурсы в проект.
Этот диалог даёт возможность включить в проект сразу несколько файлов (проверял в XE5).
При сборке проекта, эти файлы компилируются в .res файл. А при линковке (компоновке), встраиваются в программу.
Но как же программисты жили раньше? Как добавляли в программы картинки, звуки и большие текстовые файлы?
Я уверен, что вы знаете ответ на этот вопрос. А если даже и нет, то способны найти ответ меньше чем за минуту.
Ответ скорее всего будет звучать так:
- Создайте текстовый файл с расширением .RC
- Добавьте туда список ресурсов в формате: resource_name RCDATA “filename”
- Запустите компилятор ресурсов: brcc32 ваш_файл.rc
- Добавьте в программу строку: {$R ваш_файл.res}
- Пересоберите программу
- Если вам понадобится изменить ваш .rc файл, повторите шаги 2-5.
Но, чтобы не собирать этот файл вручную, можно добавить RC файл прямо в проект.
В очень старых версиях Delphi (6,7) файл с ресурсами (RC) было проще создать в блокноте, а потом добавить в проект (Add to project).
В современных версиях Delphi, отлично работает способ создания прямо из IDE:
File –> New –> Text file –> .rc Resource file
Сохраним созданный файл как animals.rc
В результате в наш .dpr файл сверху добавится строка
{$R 'animals.res' 'animals\animals.rc'}
И теперь, при каждой компиляции, пересобираться и файл animals.rc и в программе всегда будет актуальная версия.
С уважением, ваш Капитан Очевидность.
Кстати, у меня настолько вошло в привычку создавать rc-файлы вручную, что я этой возможностью (добавление ресурсов через диалог) так почти и не пользуюсь..
ОтветитьУдалить+1
ОтветитьУдалитьВ ранних версиях Delphi использовал RX Library. Там был похожий диалог.
ОтветитьУдалитья через консоль
ОтветитьУдалить1. Пишем в блокноте RC-файл, куда прописываем все нужные нам программы, например:
ОтветитьУдалитьARJ EXEFILE C:\ARHIVERS\ARJ.EXE
2. Компилируем его в ресурс при помощи Brcc32.exe. Получаем RES- файл.
3. Далее в тексте нашей программы:
implementation
{$R *.DFM}
{$R test.res} //Это наш RES-файл
// Процедура для извлечения ресурса в указанный файл
procedure ExtractRes(ResType, ResName, ResNewName : String);
var
Res : TResourceStream;
begin
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
Res.SavetoFile(ResNewName);
Res.Free;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
// Записывает в текущую папку arj.exe
ExtractRes('EXEFILE', 'ARJ', 'ARJ.EXE');
end;
Очень интересная статейка. Я уже делал однажды это но уже забыл. Теперь вы мне помогли вспомнить это.
ОтветитьУдалитьСпасибки! То что надо! А то в гугле 2 дня промучался чтобы найти как картинку загрзуить! СПАСИБО!!!
ОтветитьУдалить