Если для работы программы нужны какие-то нередактируемые файлы (картинки, звуковые, текстовые и т п), то удобно "спрятать" их внутрь .exe-файла. В этом случае они лучше защищены от потери и исправлений. Создаем текстовый файл с расширением .rc, в котором находится описание создаваемого ресурса(ов) (имя, тип, путь к файлу). Этот rc-файл компилируется программой brcc32.exe (Delphi\bin\brcc32.exe) и в результате создается файл ресурсов Fname.RES (например). В программу включается директива {$R Fname} и процедуры для доступа к содержимому этого файла.
В комментариях модуля Unit1 есть несколько полезных примеров из Инета.
В самой программе используется картинка из ресурса (фон формы - с прозрачными краями) и извлекается из ресурса и записывается на диск файл Dvig1.exe. ( прозрачность не поддерживается в Windows 9* )
unit Unit1; (*Форма хитрой формы (используется прозрачность: в инспекторе - TransparetnColor = true, TransparetnColorValue = clRed). - borderStyle = None - чтобы убрать рамку окна ---- Как поместить .bmp в ресурс ? ---- Допустим, мы хотим подключить BMP файл с названием some24bit.bmp к нашему приложению. Создадим ресурсный файл samp.rc и добавим туда следующую строчку: MYBITMAP BITMAP ..\Resource\some24bit.bmp Компилируем файл samp.rc для получения бинарного файла ресурса samp.res, набрав в командной строке brcc32.exe samp.rc. Подключим в наш проект полученный ресурсный файл, добавив директиву компилятора {$R samp.res}. Copyright © 2002 Мироводин Дмитрий Из Статьи "Обзор формата DIB и компонентов для работы с ним" ----------- /Добавление в программу дополнительного EXE-файла 1. Пишем в блокноте RC-файл, куда прописываем все нужные нам программы, например: ARJ EXEFILE C:\UTIL\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; Автор статьи - www.delphi.mastak.ru Статью добавил - maDByte --------------------- Строка в .RC для включения JPEG-картинки: 1 RCDATA "MyPic.jpg" Источник получения информации: http://www.delphimaster.ru -------------- Строка в InExe.RC для включения .RTF - файла: RTFRES RT_RCDATA USERS.RTF Компилируем: BRCC32 InExe.RC -v ( -v - параметр , обеспечивающий обратную связь с экраном. ) В файле проекта .dpr добавится следующая директива {$R } ... {$R INEXE.RES} Для доступа к ресурсам в вашем коде надо добавить ... var RS : TResourceStream; begin // создание потока ресурсов RS := TResourceStream.Create(HInstance, 'RTFRES', 'RT_RCDATA'); // использование ресурсов RichEdit.Lines.LoadFromStream(RS); // освобождение потока ресурсов RS.Free; end; ***** ( Размещение данных в EXE By Alan Lloyd - alanglloyd@aol.com Перевод Руденко Е.В. janer@newmail.ru октябрь 2001 года ) ----------- Строка в MyFont.RC для включения в ресурс шрифта: MY_FONT ANYOL1 "Bauhs93.ttf" Компиляция: BRCC32 MyFont В тексте Вашей программы разместите: {$R MyFont.res} Правильным будет разместить это в секции реализации после строчки {$R *.DFM}. Процедура создания файла из ресурса, делающая шрифт доступным для использования. procedure TForm1.FormCreate(Sender: TObject); var Res : TResourceStream; begin Res := TResourceStream.Create(hInstance, 'MY_FONT', Pchar('ANYOL1')); Res.SavetoFile('Bauhs93.ttf'); Res.Free; AddFontResource(PChar('Bauhs93.ttf')); SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0); end; Использование шрифта: procedure TForm1.Button1Click(Sender: TObject); begin Button1.Font.Name := 'Bauhaus 93'; end; Удаление этого шрифта: procedure TForm1.FormDestroy(Sender: TObject); begin RemoveFontResource(PChar("Bauhs93.ttf")); SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0); end; Источник: не известен (Инет). ---------- 1. Строка в MyWave.RC для включения в ресурс wav-файла: MYWAVE RCDATA LOADONCALL MyWave.wav Формат строки: имя | тип | опции | имя файла, где Имя - уникальное имя ресурса, по которому мы затем будем с ним работать. Теоретически (да и практически) имя не чувствительно к регистру, но лучше не рисковать и всегда именовать ресурсы большими буквами 2.Компилируем ресурсный файл при помощи brcc32.exe (он лежит в папке BIN Delphi) brcc32.exe MyWave.rc, получаем MyWave.res. 3. Перемещаем полученный ресурс в папку проекта Затем в программе воспроизведение звука выглядит примерно так: {$R MyWave.res} // Не забудем подключить наш ресурс procedure RetrieveMyWave; var hResource : THandle; pData : Pointer; begin hResource:=LoadResource( hInstance, FindResource(hInstance, 'MYWAVE', RT_RCDATA)); try pData := LockResource(hResource); if pData = nil then raise Exception.Create('Cannot read MyWave'); // Здесь pData указывает на MyWave // Теперь можно, например, проиграть его (Win32): PlaySound('MyWave', 0, SND_NODEFAULT); finally FreeResource(hResource); end; end; (C) Зайцев Олег ----------- Windows поддерживает такие виды ресурсов: RT_ACCELERATOR Accelerator table RT_ANICURSOR Animated cursor RT_ANIICON Animated icon RT_BITMAP Bitmap resource RT_CURSOR Hardware-dependent cursor resource RT_DIALOG Dialog box RT_FONT Font resource RT_FONTDIR Font directory resource RT_GROUP_CURSOR Hardware-independent cursor resource RT_GROUP_ICON Hardware-independent icon resource RT_ICON Hardware-dependent icon resource RT_MENU Menu resource RT_MESSAGETABLE Message-table entry RT_RCDATA Application-defined resource (raw data) RT_STRING String-table entry RT_VERSION Version resource Александр Василевский. e-mail: info@alvas.virtualave.net www: http://alvas.virtualave.net/index_r.html -------------- Номера типов: ------------- RT_CURSOR 1 RT_BITMAP 2 RT_ICON 3 RT_MENU 4 RT_DIALOG 5 RT_STRING 6 RT_FONTDIR 7 RT_FONT 8 RT_ACCELERATOR 9 RT_RCDATA 10 RT_MESSAGETABLE 11 RT_GROUP_CURSOR 12 RT_GROUP_ICON 14 RT_VERSION 16 RT_DLGINCLUDE 17 RT_PLUGPLAY 19 RT_VXD 20 RT_ANICURSOR 21 RT_ANIICON 22 -------- Примеры: RC-файлы, использованные в этом проекте: ------ MYRES.RC: BMP1 BITMAP Fonn2_.bmp ----- Myres2.rc: DVIG1 EXEFILE DVIG1.EXE Эти файлы компилируются программой brcc32.exe (папка Delphi\bin\ ), например: >brcc32 MYRES.RC На выходе получаются: myres.res myres2.res *) interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type TForm1 = class(TForm) BitBtn1: TBitBtn; procedure FormCreate(Sender: TObject); procedure FormPaint(Sender: TObject); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BitBtn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} {$R myres.res} {$R myres2.res} var FBMP1: TBitMap; 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.FormCreate(Sender: TObject); begin If not FileExists('Dvig1.exe') then ExtractRes('EXEFILE', 'DVIG1', 'DVIG1.EXE'); FBMP1 := TBitmap.Create; FBMP1.LoadFromResourceName(hInstance, 'BMP1'); // TransparentColorValue := $000000FF; - см в инспекторе {FBMP1.Canvas.Pixels[2,2]}; end; procedure TForm1.FormPaint(Sender: TObject); begin Canvas.Draw(0,0,FBMP1); end; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); const SC_DragMove = $F012; {Из книги А.Федорова Delphi 2.0 для всех М. 1997 г} begin ReleaseCapture; Form1.Perform(WM_SysCommand, SC_DragMove, 0 ); end; procedure TForm1.BitBtn1Click(Sender: TObject); begin Application.Terminate; end; end.