Для того чтобы ресурсы
были доступны программе, необходимо в текст программы включить инструкцию (директиву),
которая сообщит компилятору, что в файл исполняемой программы следует добавить
содержимое файла ресурсов.
В общем виде эта директива
выглядит следующим образом:
{$R
ФайлРесурсов}
где ФайлРесурсов —
имя файла ресурсов. Например, директива может выглядеть так:
{$R
images.res}
Директиву включения
файла ресурсов в файл исполняемой программы обычно помещают в начале текста
модуля.
Примечание
Если имена файла модуля программы и файла ресурсов совпадают, то вместо имени файла ресурсов можно поставить "*". В этом случае директива включения файла ресурсов в файл исполняемой программы выглядит так:
{$R *.res}
Загрузить картинку
из ресурса в переменную типа TBitMap можно при помощи метода LoadFromResourceName,
который имеет два параметра: идентификатор программы и имя ресурса. В качестве
идентификатора программы используется
глобальная переменная Hinstance. Имя ресурса должно быть представлено в виде
строковой константы.
Например, инструкция
загрузки картинки в переменную Pic может выглядеть так:
Pic.LoadFromResourceName(Hinstance,'FACTORY')
;
В качестве примера
в листинге 10.11 приведен текст программы, в которой изображение фона и самолета
загружается из ресурсов.
Листинг 10.11.
Пример загрузки картинок из ресурса
unit
aplanel_;
{$R
images.res} // включить файл ресурсов interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
ExtCtrls,
StdCtrls, Buttons;
type
TForm1
= class(TForm)
Timer1:
TTimer;
Image1:
ТImage;
procedure
FormActivate(Sender: TObject);
procedure
Timer1Timer(Sender: TObject);
procedure FormClose(Sender: TObject;
var
Action: TCloseAction); private
{
Private declarations } public
{
Public declarations } end;
var
Form1:
TForm1;
Back, bitmap, Buf : TBitMap;
//
фон, картинка, буфер
BackRct, BufRet: TRect;
//
область фона, картинки, буфера
х,у:integer;
//
координаты левого верхнего угла картинки
W,H:
integer; // размеры картинки
implementation
{$R
*.DFM}
procedure TForm1.FormActivate(Sender: TObject);
begin
Back
:= TBitmap.Create; // фон
bitmap
:= TBitmap.Create; // картинка
Buf
:= TBitmap.Create; // буфер
//
загрузить из ресурса фон
Back.LoadFromResourceName(HInstance,'FACTORY');
Forml.Image1.canvas.Draw(0,0,Back);
// загрузить из ресурса картинку, которая будет двигаться
bitmap.LoadFromResourceName(HInstance,'APLANE');
bitmap.Transparent := True;
bitmap.TransParentColor
:= bitmap.canvas.pixels[1,1];
//
создать буфер для сохранения копии области фона, на которую
//
накладывается картинка
W:=
bitmap.Width;
Н:=
bitmap.Height;
Buf.Width:=
W;
Buf.Height:=H;
Buf.Palette:=Back.Palette;
// Чтобы обеспечить соответствие палитр !!
Buf.Canvas.CopyMode:=cmSrcCopy;
BufRct:=Bounds(0,0,W,H);
x:=-W;
y:=20;
// определим сохраняемую область фона
BackRct:=Bounds(x,y,W,H);
// и сохраним ее
Buf.Canvas.CopyRect(BufRet,Back.Canvas, BackRct);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//
восстановлением фона (из буфера) удалим рисунок Form1.image1.canvas.Draw(x,y,
Buf);
x:=x+2;
if
x>form1.Image1.Width then x:=-W;
//
определим сохраняемую область фона
BackRct:=Bounds(x,у,W,H);
//
сохраним ее копию
Buf.Canvas.CopyRect(BufRct,Back.Canvas,BackRct);
//
выведем рисунок
Form1.image1.canvas.Draw(x,y,bitmap);
end;
procedure TForm1.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Back.Free;
bitmap.Free
;
Buf.Free;
end;
end.
Преимущества загрузки картинок из ресурса программы очевидны: при распространении программы не надо заботиться о том, чтобы во время работы программы были доступны файлы иллюстраций, все необходимые программе картинки находятся в исполняемом файле.