Домой! Пример: Программа хранит внутри своего исполняемого файла (.exe) картинку и другой исполняемый файл (т е ресурсы).


Если для работы программы нужны какие-то нередактируемые файлы (картинки, звуковые, текстовые и т п), то удобно "спрятать" их внутрь .exe-файла. В этом случае они лучше защищены от потери и исправлений. Создаем текстовый файл с расширением .rc, в котором находится описание создаваемого ресурса(ов) (имя, тип, путь к файлу). Этот rc-файл компилируется программой brcc32.exe (Delphi\bin\brcc32.exe) и в результате создается файл ресурсов Fname.RES (например). В программу включается директива {$R Fname} и процедуры для доступа к содержимому этого файла.

В комментариях модуля Unit1 есть несколько полезных примеров из Инета. В самой программе используется картинка из ресурса (фон формы - с прозрачными краями) и извлекается из ресурса и записывается на диск файл Dvig1.exe. ( прозрачность не поддерживается в Windows 9* )

ресурсы delphi

Текст модуля

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.

Скачать RAR-архив исходников + .exe(0.8 Mб)

Rambler's Top100
Hosted by uCoz