Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота 10.doc
Скачиваний:
17
Добавлен:
27.11.2018
Размер:
230.91 Кб
Скачать
  1. Створіть проект для роботи з бітовими зображеннями.

  1. Сформуйте фоновий рисунок як багатократне виведення бітового зображення на поверхню форми, використавши функцію Background() (рис. 4)

Рис 4. Фоновий рисунок і бітове зображення-плитка

Оголошення функції (прототип), бітового зображення (об’єкт типу TBitmap) розмістіть в розділ private оголошення класу форми, який знаходиться у файлі заголовків.

Class TForml : public TForm

{

_published|:

void __fasteal1 FormCreate (TObject *Sender);

void __fastcall FormPaint (TObject *Sender);

void __fastcall FormResize (TObject *Sender);

private:

Graphics::TBitmap *back; // елемент фонового рисунка|

void __fastcall Background(); // формує фоновий| рисунок на поверхні форми

public:

_fastcall TForml (TComponent* Owner);

};

  1. Створіть бітове зображення і завантаження картинки із файлу, використавши функцію обрабки події onCreate.

// функція обробки події OnCreate

void __fastcall TForml::FormCreate(TObject *Sender)

{

back = new Graphics::TBitmap(); // створити об’єкт — бітове зображення

// завантажити картинку

try

{

Forml->back->LoadFromFile("Legal.bmp");

}

catch (EFOpenError &e)

{

return;

}

}

  1. Створити функцію Background(), яка забезпечуватиме формування і виведення фонового рисунка.

// формує фоновий рисунок

void __fastcall TForml::Background()

{

int x=0,y=0; // координати лівого верхнього кута бітового зображення

if ( back->Empty) // бітове зображення не було загружено

return;

do

{

do

{

Canvas->Draw(x,y,back); x += back->Width;

}

while (x < ClientWidth); x = 0;

у4= back->Height;

}

while (у < ClientHeight);

}

  1. Реалізувати виведення фонового рисунку на форму, використавши функцію обробки події OnPaint шляхом виклику функції Background.

// функція обробки події OnPaint

void __fastcall TForml::FormPaint (TObject *Sender)

{

Background(); // відновить фоновий рисунок

}

  1. Створіть нову форму для реалізації переміщення зображення, підготовленого за допомогою графічного редактора.

Зображення об’екта виводиться застосуванням методу Draw до властивості Canvas форми, а стирається шляхом копіювання (метод CopyRect) потрібної частки фону з буфера в бітове зображення.

Форма програми наведена на рис. 6.

Рис. 5. Форма програми "Політ над містом"

  1. Розмістіть на формі компоненту Timer1, яка використовуватиметься для організації циклу знищення і веведення зображення літака.

Відновлення фону виконується за допомогою методу copyRect, який дозволяє виконати копіювання прямокутного фрагмента одного битового зображення в інше. У якості параметрів методу передаються: координати і розмір області, куда повинно бути виконано копіювання; поверхня, з якої повинно бути виконано копіювання; положення і розмір області, що копіюється.

void __fastoall TForml::TimerlTimer(TObject *Sender)

{

TRect badRect; // положення і розмір області фону, яку потрібно відновити

badRect = Rect(x,y,x+sprite->Width,y+sprite->Height);

// стерти літак, відновити фон

Canvas->CopyRect(badRect,back->Canvas,badRect);

// обчислимо нові координати картинки

х +=2;

if (х > ClientWidth)

{

// літак вилетів за границю форми

// змінити висоту і швидкість польоту

х = -20;

у = random(ClientHeight —30); // висота польоту

// швидкість польоту визначається періодом виникнення

// події OnTimer, яка, в свою чергу, залежить від значення властивості Interval

Timerl->Interval = random(20) + 10;

// швидкість польоту міняється від 10 до 29

}

Canvas->Draw(х,у,sprite);

}

  1. Для збереження бітового зображеня (картинок фону factory.bmp і літака aplane.bmp) використайте два об’єкта типу TBitmap, створені у функції TForm1::Formcreate(). Розмістіть оголошення цих об’єктів у файл заголовків проекта.

void _fastcall TForml::FormCreate(TObject *Sender)

{

// завантажить фоновий| рисунок із bmp-файлу

back = new Graphics::TBitmap();

back->LoadFromFile("factory.bmp");

// відновить розмір рабочої області форми у відповідності з розміром фонового рисунка

GlientWidth = back->Width;

ClientHeight = back->Height;

// завантажить картинку

sprite = new Graphics::TBitmap();

sprite->LoadFromFile("aplane.bmp");

sprite->Transparent = true;

// вихідне положення літака

x=-20; // щоб літак вилітав із-за лівої границі вікна

у=20;

}