Для того щоб ресурси були доступні програмі, необхідно в текст програми включити інструкцію (директиву), яка повідомить компілятору, що в файл виконуваної програми слід додати вміст файлу ресурсів.
У загальному вигляді ця директива виглядає наступним чином:
{$ R ФайлРесурсов}
де ФайлРесурсов – ім’я файлу ресурсів. Наприклад, директива може виглядати так:
{$ R images.res}
Директиву включення файлу ресурсів в файл виконуваної програми зазвичай поміщають на початку тексту модуля.
Примітка
Якщо імена файлу модуля програми і файлу ресурсів збігаються, то замість імені файлу ресурсів можна поставити “*”. В цьому випадку директива включення файлу ресурсів в файл виконуваної програми виглядає так:
{$ R * .res}
Завантажити картинку з ресурсу в змінну типу TBitMap можна за допомогою методу LoadFromResourceName, який має два параметри: ідентифікатор програми і ім’я ресурсу. В якості ідентифікатора програм ми використовується глобальна змінна Hinstance. Ім’я ресурсу повинно бути представлено у вигляді строкової константи.
Наприклад, інструкція завантаження картинки в змінну Pic може виглядати так:
Pic.LoadFromResourceName (Hinstance, 'FACTORY') ;
Як приклад в лістингу 10.11 наведено текст програми, в якій зображення фону і літака завантажується з ресурсів.
Лістинг 10.11. Приклад завантаження картинок з ресурс
unit < font face = "Courier New, Courier, mono"> 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.
Переваги завантаження картинок з ресурсу програми очевидні: при поширенні програми не треба піклуватися про те, щоб під час роботи програми були доступні файли ілюстрацій, всі необхідні програмі картинки знаходяться в виконуваному файлі.