Иллюстрированный самоучитель по C++ Builder

Подключение файла ресурсов

Листинг 3.9. Баннер (baner.h, baner_.cpp).

// baner.h
class TForml: public TForm
{ published:
TTimer *Timerl;
void__fastcall FormCreate(TObject *Sender);
void __fastcall TimerITimer(TObject *Sender);
private:
Graphics::TBitmap *baner; // баннер
TRect kadr; // кадр баннера
TRect scr; // область воспроизведения баннера
int w, h; // размер кадра
int с; // номер воспроизводимого кадра
public:
_fastcall TForml(TComponent* Owner);
};
// baner_.cpp
#define FBANER "borland.bmp" // баннер
#define NKADR 4 // количество кадров в баннере
void__fastcall TForml::FormCreate(TObject *Sender)
{
baner = new Graphics::TBitmap();
baner › LoadFromFile(FBANER); // загрузить баннер
h = baner › Height;
w = baner › Width / NKADR;
scr = Rect(10.10.10+w,10+h); // положение и размер области
// воспроизведения баннера kadr = Rect(0.0,w,h);
// положение и размер первого кадра
//в баннере
}
// обработка события OnTimer
void__fastcall TForml:rTimerlTimer(TObject *Sender)
{
// вывести кадр баннера
Canvas › CopyRect(scr,baner › Canvas,kadr);
// подготовиться к воспроизведению следующего кадра
if (с < NKADR)
{
// воспроизводимый в данный момент
// кадр – не последний
с++;
kadr.Left += w;
kadr.Right += w;
 }
else
{
с = 0;
kadr.Left = 0;
kadr.Right = w;
 }
 }

Основную работу в программе выполняет функция обработки события onTimer, которая выделяет из битового образа Baner очередной кадр и выводит его на поверхность формы. Выделение кадра и его отрисовку путем копирования фрагмента картинки с одной поверхности на другую выполняет метод copyRect (рис. 3.25), которому в качестве параметров передаются координаты области, куда нужно копировать, поверхность и положение области, откуда нужно копировать. Положение фрагмента в фильме, т. е. координата х левого верхнего угла, определяется умножением ширины кадра на номер текущего кадра.

Иллюстрированный самоучитель по C++ Builder › Графика › Подключение файла ресурсов
Рис. 3.25. Метод CopyRect копирует в область Rect1 поверхности Canvas1 область Rect2 с поверхности Canvas2

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.