Подключить res файл delphi

Обновлено: 04.07.2024

подключаешь этот файл к проекту, точно так же как подключаешь *.pas-файлы.

Подключать-то надо .rc, а не .res.

А что тебе нужно в оном res? Если картинки, то кроме глючного
Image Editor ничего для этого нет.
Лучше уж какой-нибудь Resource Restorator или что-то by MS.

Ну, а если влом искать - то можно сделать из этого ресурса
dll (скомплировать заготовку c вкл. )
и попытать ее ResXplor (Demos\ResXplor\).

myBMP BITMAP "img.BMP"

rc - это скрипт, описывающий какие ресурсы включаются в файл ресурсов.
А res - это скомпилированный файл ресурсов, готовый для компоновки в
исполняемый PE.

Т.е., если у тебя есть некий x.res и нужда добавить в PE еще и свой y.res,
то нет необходимости y.res добавлять в x.res.

// включаем старый ресурс
// добавляем свой

> // включаем старый ресурс
> // добавляем свой

> в dpr, насколько помнится, есть строка , т.е.
> все ресурсы (которые находятся в одном каталоге с проектом)
> подключатся автоматически.

Delphi help. Project file
..
< links in resource file >
..
The $R compiler directive specifies that the file with the same base name as
the project and the extension .res should be linked into the project.

Ну не знаю, неоднократно сталкивался с warning"ом:
[Error] WARNING. Duplicate resource(s):

при попытке явного добавления ресурса из каталога проекта.
Неисключено, что в хелпе допущена неточноть.

> PS: "*" - вообще-то значит "любое" имя а не same base name
> as the project..

* означает именно имя проекта.
Также как *.dfm - означает имя юнита.

The * symbol has a special meaning in $R directives: it stands for the base name
(without extension) of the source-code file where the directive occurs. Usually,
an application’s resource (.res) file has the same name as its project (.dpr) file;
in this case, including in the project file links the corresponding
resource file to the application. Similarly, a form (.dfm or xfm) file usually has the
same name as its unit (.pas) file; including in the .pas file links the
corresponding form file to the application.

Я не пойму, о каких неточностях речь, бо так было, по-крайней мере,
еще со времен D2.

Подключение ресурсов в исполнимые файлы Delphi

В этой статье я попытаюсь объяснить как включать файлы в приложения Delphi как различные виды ресурсов и как управлять ими.

Можно включить любой файл в исполнимый файл для использования как ресурс. Некоторые виды ресурсов признаются API и могут использоваться непостредственно. Другие просто принимаются как двоичные данные. В этой статье мы рассмотрим примеры обоих видов.

Чтобы создать файл ресурса, мы начинаем с исходного файла *.RC, например, по имени Resources.rc , который содержит виды ресурсов (имя, класс и файл).

Имена ресурсов (sample_bmp, sample_ico и т.д.) произвольны. Вид ресурса может быть поддерживаемый API (BITMAP, ICON, CURSOR) или произвольный (JPEG, WAVE, TEXT). Имена файла определяют файлы, которые будут включены в .RES, а позже .EXE.

Теперь мы должны скомпилировать .RC файл, чтобы получился .RES файл. Для этого мы можем использовать Borland Resource Compiler (brcc32.exe).

Набрав в командной строке, мы получим:

Для того, чтобы присоединить файл ресурсов к нашему проекту, мы используем директиву или :

Загрузка поддерживаемых ресурсов (BITMAP, CURSOR, ICON) проста, так как Windows API предоставляет нам функции LoadBitmap, LoadCursor, LoadIcon соответственно для получения дескрипторов этих элементов.

Другие ресурсы использовать немного сложнее. Давайте начнем с изображения JPEG. Мы будем использовать функцию TResouceStream, чтобы загрузить ресурс как поток, который будет загружен в объект TJpegImage.

Для WAV файлов мы нуждаемся в указателе на ресурс, загруженный в память, а для текстового файла мы должны загрузить ресурс в строку. Мы можем сделать это, используя TResourceStream, но давайте посмотрим пример, который использует API:

Как только мы загрузим WAV ресурс в память, мы можем его проигрывать столько раз, сколько нужно, используя sndPlaySound, объявленную в модуле MMSystem.

Есть некоторые ресурсы (типа шрифтов, анимированных курсоров), которые не могут использоваться из памяти. Мы обязательно должны сохранить эти ресурсы во временном файле на диске и загружать их оттуда. Следующая функция сохраняет ресурс в файл:

Следующая функция использует предыдущую, чтобы сохранить ресурс во временном файле:

Следующая функция использует SaveResourceAsTempFile, чтобы сохранить ресурс анимированного курсора во временном файле, затем загризить этот ресурс из файла при помощи LoadImage и затем удалить временный файл. Функция возвращает дескриптор, возвращенный функцией LoadImage.


В этом уроке мы научимся добавлять любые файлы в наш исполняемый exe файл.

Для этого напишем такую процедуру:

04. Buf: array of Byte;

06. hFile := BeginUpdateResource(PChar(Path), False);

08. if hFile = 0 then

12. SetLength(Buf, Data . Size);

13. Data . Position := 0 ;

14. Data . Read(Buf[ 0 ], Data . Size);

15. if not UpdateResource(hFile, PChar(AType), PChar(AName),

16. 0 , @Buf[ 0 ], Data . Size) then RaiseLastOSError;

19. EndUpdateResource(hFile, False);

Теперь вызовем ее в программе:

1. Data := TFileStream . Create( 'c:\1.txt' , fmOpenRead);

3. ExportData( 'c:\test.exe' , 'test' , 'sometype' , Data);

В дальнейшем .exe файл извлекет из себя этот ресурс с помощью процедуры:

01. procedure ExtractRes(Path: String);

04. with TResourceStream . Create(HInstance, 'test' , 'sometype' ) do

07. SaveToFile(Path + '1.txt' );

Чтобы проверить - есть ли в exe файле этот ресурс (можно уже извлекать или нет) используем функцию:

01. varResourceName : array of ShortString;

02. function GetResourceList: Boolean;

04. Errors: Cardinal;

05. function CallBack(hModule: HMODULE; lpType: PChar;

06. lpzName: LPTSTR; lParam: Longint): BOOL; stdcall;

08. Size: Cardinal;

10. Result := True;

11. if Assigned(lpzName) then

13. Size := Length(ResourceName);

15. SetLength(ResourceName, Size);

16. ResourceName[Size - 1 ] := ShortString(lpzName);

20. Result := True;

21. ResourceName := nil ;

23. EnumResourceNames(HInstance, 'sometype' , @CallBack, 0 );

Чтобы удалить из exe файла ресурс измените в процедуре 1

1. if not UpdateResource(hFile, PChar(AType), PChar(AName),

2. 0 , @Buf[ 0 ], Data . Size) then RaiseLastOSError;

На вот эти строки:

1. if not UpdateResource(hFile, PChar(AType), PChar(AName),

2. 0 , nil , 0 ) then RaiseLastOSError;

После этого создавайте свою копию, удаляйте у копии ресурс и заменяй себя копией (Например через *.bat файл)

Получите более 30 часов видео по Delphi прямо сейчас со скидкой:

Урок Delphi | Добавление к .exe файлу в ресурсы файл file.any (Любой файл)

Хранение ресурсов (WAV, MP3, . ) внутри EXE

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

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

В этой статье будет рассмотрено, как включать звуковые файлы, видео, анимацию и другие двоичные файлы в исполнимый файл Delphi.

Файлы ресурсов (.RES)

Включение нескольких двоичных файлов в исполнимый состоит из 5 шагов:

  1. Составьте и/или соберите все файлы, которые необходимо включить в EXE
  2. Создайте файл сценария ресурсов (.RC), который описывает все ресурсы, исользуемые Вашим приложением
  3. Скомпилируйте файл сценария ресурсов (.RC), чтобы создать файл ресурсов (.RES)
  4. Свяжите скомпилированный файл ресурсов с исполнимым файлом
  5. Используйте индивидуальные элементы ресурсов

Первый шаг очень прост: просто решите какие файлы Вы хотите хранить в исполнимом. Например, мы будем хранить две .WAV песни, одну .AVI видео и одну .MP3 песню.

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

а) Загрузка и выгрузка ресурсов на время выполнения операции. Ресурсы - часть исполнимого файла приложения и загружается во время выполнения приложения.

б) Вся свободная память может использоваться при загрузке/выгрузке ресурсов. Другими словами, нет никаких пределов в количестве ресурсов, загруженных одновременно.

в) Конечно, файл ресурсов увеличивает размер исполнимого. Если Вы хотите уменьшить размер исполнимого файла, рассмотрите размещение ресурсов и части Вашего проекта в DLL и пакетах.

Теперь давайте посмотрим, как создать файл, который описывает ресурсы.

Создание файла сценария ресурсов (.RC)

Файл сценария ресурсов - это простой текстовый файл с расширением .RC, который перечисляет ресурсы. Файл сценария имеет следующий формат:

ResName определяет или уникальное имя или целое число (ID), который обозначает ресурс.
ResType описывает тип ресурса
ResFileName - полный путь и имя файла, который будет включен в ресурс.

Для создания нового файла сценания ресурсов проделайте следующее:

  1. Создайте новый текстовый файл в каталоге проектов
  2. Переименуйте его в MyRes.rc

В MyRes.rc записано следующее:

1. clock WAVE "c:\mysounds\projects\clock . wav"

2. MailBeep WAVE "c:\windows\media\newmail . wav"

3. Cool AVI cool . avi

4. Intro RCDATA introsong . mp3

Файл сценария просто определяет ресурсы. В данном формате MyRes.rc перечисляет два WAV файла, один AVI и одну песню в MP3 формате. Все инструкции в .RC файле связывают имя ресурса, тип и имя файла для данного ресурса. Есть около дюжины предопределенных типов ресурсов. Они включают иконки, точечные рисунки, курсоры, анимацию и т.д. RCDATA определяет пользовательский тип данных. RCDATA позволяет включать любой ресурс данных для приложения. Пользовательские ресурсы данных разрешают включение двоичных данных непосредственно в исполняемом файле. Например, заявление RCDATA выше называет двоичный ресурс приложения Intro и определяет файл, который содержит песню в MP3 формате.

Примечание: удостоверьтесь, что у Вас имеются все ресурсы, перечисленные в Вашем файле .RC. Если файлы внутри каталога проектов, то Вы не должны включать полный путь к файлам.

Создание файла ресурсов (.RES)

Чтобы использовать ресурсы, определенные в файле сценария ресурсов, мы должны скомпилировать его в .RESфайл при помощи Borland Resource Compiler. Компилятор ресурсов создает новый файл, основанный на содержании файла сценария ресурсов. Этот файл имеет обычно расширение .RES. Компоновщик Delphi позже будет повторно форматировать .RES файл в файл объекта ресурсов, а затем связывать его с исполнимым файлом приложения.

Bopland Resource Compiler находится в каталоге Delphi/Bin. Имя - BRCC32.exe. Просто введите в командной строкеbrcc32.exe и нажмите Enter. Компилятор запустится и отобразит справку использования (без параметров в командной строке).

Подготовьте файл MyRes.rc и выполните команду (в каталоге проектов):

По умолчанию, при компилировании ресурсов, BRCC32.exe называет скомпилированный файл с расширением .RES с именем .RC файла и помещает его в тот же каталог, что и .RC.

Подключение файла ресурсов к исполнимому файлу

Мы создали файл ресурсов. В следующем шаге мы должны добавить следующую директиву компилятора в модуле нашего проекта сразу после директивы формы (ниже ключевого слова implementation).

Случайно не удалите , так как эта строка кода сообщает Delphi о подключении визуальной части формы. Когда Вы выбираете точечные рисунки для компонентов SpeedButton, Image или Button, Delphi включает растровый файл, который Вы выбрали как часть ресурса формы.

После того, как .RES файл будет связан с исполняемым файлом, приложение может загружать его ресурсы во время выполнения, когда это будет необходимо. Чтобы фактически использовать ресурс, Вы должны будете сделать несколько вызовов API.

Нам нужен будет новый проект с пустой формой. Добавьте директиву в модуль главной формы. Как уже было сказано выше, мы будем иметь дело с функциями Windows API.

Например, метод LoadFromResourceName объекта TBitmap. Этот метод извлекает указанный растровый ресурс и назначает его объекту TBitmap. Это аналогично вызову функции LoadBitmap в Windows API. Как всегда, Delphi улучшил вызов функции API, чтобы удовлетворить наши потребности лучше.

Такой вот совет пришел ко мне с рассылкой "Ежедневная рассылка сайта Мастера DELPHI", думаю многим будет интересно.

Решить эту задачу нам поможет функция function ExtractIcon(hInstance, filename, iconindex):integer где hinstance - глобальная переменная приложения, ее изменять не надо. Тип integer.

filename - имя программы или DLL из которой надо извлекать иконки. Тип pchar. iconindex - порядковый номер иконки в файле (начинается с 0). В одном файле может находится несколько иконок. Тип integer.

Функция находится в модуле ShellApi, так что не забудьте подключить его в uses. Если эта функция возвратит ноль, значит иконок в файле нет.

Данная функция возвращает handle иконки, поэтому применять ее нужно так: Image1.Picture.Icon.Handle:=ExtractIcon(hInstance, pchar(paramstr(0)), 0);

данное объявление нарисует в Image'e картинку вашего приложения.

Автор: Михаил Христосенко

Как загрузить BMP файл из DLL?

procedure TForm1.Button1Click(Sender: TObject);

AModule := LoadLibrary( 'Images.dll' );

Работа с ресурсами

Сохранить файл в ресурсе программы на этапе компилляции можно выполнив следующие шаги:

1) Поставить себе RxLib

2) Появится в меню "Project" дополнительный пункт меню "Resources"

3) Открой его , создай новый ресурс "User Data", в него загрузи нужный файл, измени имя ресурса на что-нибудь типа 'MyResName'.

Теперь при компилляции проэкта в exe файл будет прикомпиллирован ваш файл в виде ресурса. Извлечь его на этапе выполнения можно следующим образом:

Сохранение и выдёргивание ресурсов в DLL или EXE?

Иногда возникает необходимость вшить ресурсы в исполняемый файл Вашего приложения (например чтобы предотвратить их случайное удаление пользователем, либо, чтобы защитить их от изменений). Данный пример показывает как вшить любой файл как ресурс в EXE-шнике.

Далее рассмотрим, как создать файл ресурсов, содержащий корию какого-либо файла. После создания такого файла его можно легко прицепить к Вашему проекту директивой . Файл ресурсов, который мы будем создавать имеет следующий формат:

+ заголовок для нашего RCDATA ресурса

+ собственно данные - RCDATA ресурс

Таблицы строк

Ресурсы в виде таблиц строк (Stringtable) являются очень полезным подспорьем, когда ваше приложение должно хранить большое количество строк для их вывода во время выполнения приложения. Вы должны побороть искушение непосредственной вставки строк в вашу программу, поскольку использование таблиц строк имеет два неоспоримых преимущества:

1) Строки, хранимые в ресурсах, не занимают память до тех пор, пока они не будут загружены вашим приложением.

2) Stringtables легко редактировать, создавая таким образом локализованные (переведенные) версии вашего приложения.

Таблицы строк компилируются в ".res"-файл, который включается в exe-файл приложения во время сборки. Даже после того, как вы распространите ваше приложение, таблицы строк, содержащиеся в вашем приложении могут редактироваться редактором ресурсов. Моим любимым редактором ресурсов является Borland Resource Workshop, поставляемый в комплекте с Delphi. Он позволяет в режиме WYSIWYG редактировать как 16-, так и 32-битные ресурсы, как автономные, так и имплантированные в exe или dll-файлы. Тем более это удобно, если учесть что вместе со всеми версиями Delphi поставляется компилятор

ресурсов из командной строки (Borland Resource Command Line Compiler) (BRCC.EXE и BRCC32.EXE), расположенный в Delphi-директории Bin.

Как поместить JPEG-картинку в exe-файл и потом загрузить ее?

1)Создайте текстовый файл с расширением ".rc".Имя этого файла должно отличаться

от имени файла - пректа или любого модуля проекта.

Файл должен содержать строку вроде: MYJPEG JPEG C: \DownLoad\MY.JPG

"MYJPEG" имя ресурса

"JPEG" пользовательский тип ресурса

"C: \DownLoad\MY.JPG" руть к JPEG файлу.

Пусть например rc - файл называется "foo.rc"

Запустите BRCC32.exe(Borland Resource CommandLine Compiler) - программа находится

в каталоге Bin Delphi / C + +Builder'а - передав ей в качестве параметра полный путь

Читайте также: