Подключение файла ресурсов
Для того чтобы ресурсы, находящиеся в файле ресурсов, были доступны программе, в текст программы надо поместить инструкцию (директиву), которая сообщит компилятору, что в исполняемый файл следует добавить содержимое файла ресурсов.
В общем виде эта директива выглядит следующим образом:
#pragma resource ФайлРесурсов
Где ФайлРесурсов – имя файла ресурсов.
Например, для программы flight_l директива, обеспечивающая включение содержимого файла ресурсов в выполняемый файл, выглядит так:
#pragma resource "images.res"
Загрузить битовый образ из ресурса можно при помощи метода LoadFromResourceName, который имеет два параметра: идентификатор программы и имя ресурса. В качестве идентификатора программы используется глобальная переменная Hinstance. Имя ресурса должно быть представлено в виде строковой константы.
Например, в программе flight_l инструкция загрузки фона из ресурса выглядит так:
back › LoadFromResourceName((int)Hinstance,"FACTORY");
В качестве примера в листинге 3.8 приведен фрагмент программы flight_l – функция TForm1::FormCreate, которая обеспечивает загрузку битовых образов из ресурсов.
Листинг 3.8. Загрузка битовых образов из ресурса.
// подключить файл ресурсов, в котором находятся // необходимые программе битовые образы #pragma resource "images.res" void__fastcall TForml::FormCreate(TObject *Sender) { // загрузить фоновый рисунок из ресурса back = new Graphics::TBitmap(); back › LoadFromResourceName((int)HInstance,"FACTORY"); // установить размер клиентской (рабочей) области формы //в соответствии с размером фонового рисунка ClientWidth = back › Width; ClientHeight = back › Height; // загрузить изображение объекта из ресурса sprite = new Graphics::TBitmap(); sprite › LoadFromResourceName((int)HInstance,"APLANE"); sprite › Transparent = true; // исходное положение самолета x=-20; // чтобы самолет "вылетал" из-за левой границы окна у=20; }
Преимущества загрузки картинок из ресурса программы очевидны: при распространении программы не надо заботиться о том, чтобы во время работы программы были доступны файлы иллюстраций, т. к. все необходимые программе картинки находятся в исполняемом файле.
Теперь рассмотрим, как можно реализовать в диалоговом окне программы вывод баннера, представляющего собой последовательность сменяющих друг друга картинок (кадров). Кадры баннера обычно находятся в одном файле или в одном ресурсе. В начале работы программы они загружаются в буфер (объект типа TBitmap). Вывод кадров баннера обычно выполняет функция обработки сигнала от таймера (события onTimer), которая выделяет очередной кадр и выводит его на поверхность формы.
Вывести кадр баннера (фрагмент битового образа) на поверхность формы можно при помощи метода copyRect, который копирует прямоугольную область одной графической поверхности на другую.
Инструкция применения метода CopyRect в общем виде выглядит так:
Canvasl › CopyRect(Область1, Canvas2, Область2)
Где:
- Canvas1 – поверхность, на которую выполняется копирование;
- Canvas2 – поверхность, с которой выполняется копирование;
- Область1 – структура типа TRect, которая задает положение и размер области, куда выполняется копирование (приемник);
- Область2 – структура типа TRect, которая задает положение и размер области, откуда выполняется копирование (источник).