- •Лабораторна робота 10
- •Мета. Навчитись розробляти програми, які працюють з графікою; створювати картинки за допомогою графічних примітивів, або ілюстрацій, створених в графічному редакторі Завдання до роботи
- •Теоретічні відомості Графічні примітиви
- •Ілюстрації
- •Запрограмувати обробку подій OnPaint та OnResize для форми.
- •Створіть проект для роботи з бітовими зображеннями.
- •Сформуйте фоновий рисунок як багатократне виведення бітового зображення на поверхню форми, використавши функцію Background() (рис. 4)
- •Виведіть зображення фону та рисунку на форму за допомогою методу Draw()
- •Завантажте бітове зображення із ресурсу програми
- •Створити файл ресурсів
- •Підключити файлу ресурсів
- •Збережіть створену програму у своїй папці.
- •Створіть ехе-файл вашої програми.
- •Продемонструйте створену форму викладачеві. Закінчіть роботу.
- •Контрольні запитання:
- •1. Назвіть основні Методи для рисування графічних примітивів
- •2. Як здійснити виведення тексту на поверхню Canvas?
-
Створіть проект для роботи з бітовими зображеннями.
-
Сформуйте фоновий рисунок як багатократне виведення бітового зображення на поверхню форми, використавши функцію 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);
};
-
Створіть бітове зображення і завантаження картинки із файлу, використавши функцію обрабки події onCreate.
// функція обробки події OnCreate
void __fastcall TForml::FormCreate(TObject *Sender)
{
back = new Graphics::TBitmap(); // створити об’єкт — бітове зображення
// завантажити картинку
try
{
Forml->back->LoadFromFile("Legal.bmp");
}
catch (EFOpenError &e)
{
return;
}
}
-
Створити функцію 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);
}
-
Реалізувати виведення фонового рисунку на форму, використавши функцію обробки події OnPaint шляхом виклику функції Background.
// функція обробки події OnPaint
void __fastcall TForml::FormPaint (TObject *Sender)
{
Background(); // відновить фоновий рисунок
}
-
Створіть нову форму для реалізації переміщення зображення, підготовленого за допомогою графічного редактора.
Зображення об’екта виводиться застосуванням методу Draw до властивості Canvas форми, а стирається шляхом копіювання (метод CopyRect) потрібної частки фону з буфера в бітове зображення.
Форма програми наведена на рис. 6.
Рис. 5. Форма програми "Політ над містом"
-
Розмістіть на формі компоненту 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);
}
-
Для збереження бітового зображеня (картинок фону 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;
}