- •Тема 1. Поняття про об’єктно-орієнтоване програмування. Поняття про об’єктно-орієнтоване програмування
- •Інструмент прискореної розробки програм
- •Список файлів проекту.
- •Деякі важливі принципи візуального програмування.
- •Вікна інспектора об'єктів, форми, модуля.
- •Лабораторна робота №1 «Робота в середовищі Delphi»
- •Тема 2. Основи об’єктно-орієнтованого програмування.
- •Лабораторна робота №2 «Створення типового вікна Windows-додатку. Властивості об’єктів форми.»
- •Теоретичні відомості:
- •I. Властивості об’єкту Форма.
- •Теоретичні питання:
- •Тема 3. Особливості ооп: основні концепції
- •Лабораторна робота №3 Робота з формою та компонентами Panel, Label, Edit, Button.
- •Лабораторна робота №4 Робота над проектом «Альбом картинок» (компонент Image вкладки Additional)
- •Тема 4. Структура програми Структура програми складається з:
- •Структура проекту
- •Структура модуля
- •Елементи програми
- •Елементи мови Алфавіт
- •Лексеми
- •Теоретичні питання
- •Лабораторна робота №5 Робота над проектом «Текстовий редактор»
- •Тема 5. Типи даних. Введення та виведення числових даних. Функції перетворення. Математичні функції
- •Прості типи
- •Порядкові типи
- •Цілі типи
- •Введення та виведення числових даних
- •Допомога 1.
- •Допомога 2.
- •Лабораторна робота №6. «Створення програм лінійної структури. Створення програми «Калькулятор»
- •В аріант завдання для вибору:
- •Тема 6. Оператори мови Delphi
- •Лабораторна робота №7 Створення найпростішого Windows-Додатка в Delphi, з використанням умовного оператора та оператора вибору.
- •1 Спосіб розв’язку квадратного рівняння
- •2 Спосіб розв’язання квадратного рівняння
- •Створити додатки за вказаним варіантом та записати блок-схему алгоритму:
- •Лабораторна робота № 8 «Створення програм з використанням операторів циклів»
- •Лабораторна робота № 9 «Розробка графічного інтерфейсу програми. Основні керуючі елементи.»
- •1. Програмування об’єкту – перемикач (tRadioButton).
- •Програмування об’єкту – прапорець (tCheckBox).
- •Тема 7. Масиви
- •Лабораторна робота № 10 «Структуровані типи даних»
- •Тема 8. Робота з файлами
- •Лабораторна робота №11 «Файлові типи даних»
- •Тема 9. Допоміжні алгоритми
- •Лабораторна робота № 12 «Створення програм з використанням процедур та функцій»
- •Тема 10. Работа з графікою та мультимедіа
- •Реалізація мультимедійних технологій. Відтворення відеокліпів
- •Внимание!
- •Лабораторна робота № 13 «Створення проекту «Побудова графіка функцій»»
- •Тема 11. Створення анімації в Delphi
- •Лабораторна робота № 14 «Створення проекту «Графічний конструктор»»
- •Лабораторна робота № 15 Створення багатовіконного проекту «Тест з географії»
- •Форма «Тестування» — модуль f_Test
- •Форма «Результат» — модуль fRes
- •Форма «Домопога» — модуль fInstr unit f__lnstr;
- •Тема 12. Організація роботи з таблицями та базами даних. Лабораторна робота №16. Розробка проекту «Рейтинг країн за результатами олімпійських змагань»
- •Лабораторна робота № 17 Створення проекту «Довідник по країнах»
- •Лабораторна робота № 18 Створення проекту «Телефонна книга»
- •Лабораторна робота № 19 Створення проекту «Довідник по тваринах»
- •Лабораторна робота № 20 Створення довідкової системи
- •Хід роботи
Тема 11. Створення анімації в Delphi
Анімація – це комп’ютерне виконання еффекту руху або видозміна об’єктів в часі. Алгоритм програми, як правило, складається з наступних кроків:
прорисовка об’єкту
відрахунок інтервалу часу
заповнення об’єкту фоновою заливкою
малювання нового зображення із зміною положення або форми
П
Виклик
процедури обробки події
тіка
таймера виконується
через команду інспектора
об’єктів:
Events/OnTimer
для компоненту
Timer1.
Код програми
данної
процедури
буде виконуватись
кожен
раз через
рівні
проміжки
часу
лічильника
таймеру,
задані
у
властивості
Interval.
// по формі рухається поморанчевий кулька
procedure TForm1.Timer1Timer(Sender: TObject);
begin // малюємо коло кольором фону форми
with Canvas do
begin
Pen.Color:=Form1.Color;
Brush.Color:=Form1.Color;
Ellipse(kx-kr,ky-kr,kx+kr,ky+kr);
end;
inc(kx); // сдвигаємо координату по осі Х на 1 малюємо коло довільним
// кольором на новому місці
with Canvas do
begin
Pen.Color:=4227327;
Brush.Color:= 4227327;
Ellipse(kx-kr,ky-kr,kx+kr,ky+kr);
end; end;
Лабораторна робота № 14 «Створення проекту «Графічний конструктор»»
Мета: 1. Навчитися створювати графічні малюнки з використанням ефектів анімації.
2. Познайомитися з засобами середовища Delphi, які забезпечують виведення стандартних зображень впродовж певного інтервалу часу.
Завдання. Створити програму, за допомогою якої користувач зміг би із запропонованого набору фігур зібрати та розфарбувати машинку, повантажити на неї мишку та відправити її у дорогу. «Урочисту» подію старту відзначити святковим салютом.
Аналіз проекту. Для створення графічного конструктора необхідно познайомитись із засобами середовища Delphi, які забезпечують виведення анімованих стандартних зображень впродовж певного інтервалу часу, причому користувач повинен мати змогу спостерігти за ходом цього процесу.
Для розробки цього проекту скористаємось такими компонентами Delphi:
Animate (вкладка Win32 палітри компонентів) - анімація, що використовується для виведення стандартних відеокліпів ОС Windows та «німих» відеофайлів *.avi;
Timer (вкладка System палітри компонентів) - таймер. Використовується для відліку інтервалів реального часу;
ProgressBar (вкладка Win32 палітри компонентів) - індикатор процесу, задопомогою якого можна відображати перебіг виконання певного процесу, наприклад копіювання даних на дискету.
Для збирання машинки основне поле форми відведемо під компонент Panel, але в цьому проекті компонент Panel використовуватиметься для об'єднання кількох компонентів.
На цьому компоненті будемо розміщувати деталі конструктора: різні види компонента Shape (вкладка Additional палітри компонентів) - фігура, компонент Image та компонент Label. Для того, щоб ці компоненти були «прив'язані» до компонента Panel, необхідно спочатку розмістити на формі цей компонент, а потім з палітри компонентів розміщувати дочірні компоненти.
Для організації перетягування фігур скористаємось комбінацією обробки подій: «кнопка миші натиснута», «кнопка миші утримується», «кнопка миші відпущена».
Як відомо, до складу ОС Windows входять типові діалогові вікна (вікна вибору: файла, шрифту, кольору, настройки принтера тощо). У цьому проекті ми використаємо засіб Delphi, який дає змогу організувати виклик стандартних вікон Windows (додати до проекту невізуальні компоненти вкладки Dialogs).
Робота зі стандартним діалоговий вікном відбувається у 3 етапи:
Розміщення на формі відповідного компонента з палітри Dialogs, наприклад ColorDialogl - діалогове вікно вибору кольору.
Виклик методу Execute, який створює та відображує на екрані це діалогове вікно. Цей метод зазвичай викликається всередині обробки якоїсь події, наприклад, у процедурі опрацювання натискання на компоненті Shape правою кнопкою миші. Тільки після звернення до методу Execute на екрані з'являється відповідне діалогове вікно. Це вікно смодальним, тому одразу після звернення до методу Execute виконання програми припиняється доти, доки користувач не закриє вікно. Оскільки Execute — логічна функція, то вона повертає в програму значення True, якщо у вікні діалогу було натиснутоОК.
Аналіз результату роботи методу Execute та використання введених у діалоговому вікні даних - імені файла, вибраного кольору, вибраного шрифту тощо.
Алгоритм розробки проекту
Створити папку D:\Delphi\Pract_17.
Створити новий проект.
Розмістити на формі компоненти Labell, Panell, BitBtnl (рис. 1). Встановити цим компонентам властивості за табл. 1.
Рис.1
Таблиця 1
Компонент |
Вкладка вікна Object Inspector |
Properties / Events |
Значення властивості/обробка події (тіло процедури обробки події) |
Label1 |
Properties |
AutoSize |
False |
WordWrap |
True |
||
Caption |
Збери машинку. Повантаж мишку на машинку та натисни «Готово». |
||
Panel1 |
Properties |
Caption |
<Чисте поле> |
AutoSize |
False |
||
Ctl3D |
False (відключення тривимірного зображення) |
||
BitBtn1 |
Properties |
Color |
clBtnFase (колір об’єкта збігається з кольором форми) |
Kind |
blAll |
||
Caption |
Готово |
Пояснення. Кнопка «Готово» запускатиме салют і відправлятиме мишку в дорогу.
4. Компоненту Рапеl1 надати такого розміру, щоб він зайняв всю форму від компонента Label1 до кнопки BitBtn1. На панелі Рапеl1 розміститигеометричні фігури Shapel-Shape3 (три прямокутника: кузов, кабіна,вікно кабіни) та Shape4, Shape5 — два кола (колеса). Для встановленнявиду фігури використати властивість Shape, для встановлення стилю такольору зафарбовування використати властивості Brush.Color,Brush.Style, для встановлення кольору та типу лінії контуру використативластивості Pen.Color, Pen. Style. На компоненті Рапеl1 розмістити такіоб'єкти, як на табл. 2.
Таблиця 2
Компонент |
Вкладка вікна Object Inspector |
Properties/Events |
Значення властивості/обробка події (тіло процедури обробки події) |
Label2 |
Properties |
Caption |
Миші (напис для кузова) |
Image1 |
Properties |
Picture |
Відкрити графічний файл з зображенням миші |
Зауваження. Якщо планується, що при конструюванні машинки одні об'єкти будуть накладатися на інші (наприклад, вікно кабіни на кабіну), то встановити порядок розташування об'єктів: активізувати об'єкт, викликати правою кнопкою миші контекстне меню, вибрати Компонент. Зробити нижнім (верхнім).
5. Для всіх компонентів, розміщених на панелі Рапеl1, запрограмувати перетягування об'єктів по панелі. Для цього створити для цих компонентів процедури опрацювання подій OnMouseDown (кнопку натиснуто), OnMouseMove (кнопка миші утримується натиснутою), OnMouseUp(кнопку відпущено):
procedure TForml.Label2MouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, У: Integer) ;
begin
flag:=False;
end;
procedure TForml.Label2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
xl:=x;yl:=y; flag:=True;
end;
procedure TForml.Label2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if flag then with TShape (sender) do begin Left:=Left+x-xl;Top:=Top+y-yl; end;
end;
Пояснення. Якщо під час виконання програми кнопка миші буде натиснута в той час, коли її курсор знаходиться в області компонента Label2, змінні х1 і х2 запам'ятають координати розміщення фігури, а прапорець flag отримає значення True, що означатиме «перетягування почалось». Якщо кнопку миші не відпускати й рухатись, то працюватиме процедура TForm1. Label2MouseMove, в якій відбуватиметься перерахування координат об'єкта Label1 стосовно системи координат форми.
Після того, як кнопка миші буде відпущена, спрацює процедура TForm1. Label2MouseUp, де прапорець flag отримає значення False —перетягування закінчилось.
6. Зберегти проект.
Запустити проект та перевірити правильність його виконання: перетягуючи об'єкти на панелі — зібрати машинку та повантажити мишку на машинку. Кнопка «Готово» поки не працює.
Розмістити на формі об'єкт Animate1 (праворуч або ліворуч від компонента Label1) — для відображення відеокліпу. Розмістити в будь-якому місці форми об'єкт Timer1 —для відліку інтервалів часу.Таймер включається при присвоєнні значення True його властивості Enabled і виключається, коли виконується Timer1.Enabled:=False;
Поруч з кнопкою «Готово» розмістити об'єкт ProgressBar1 — для відображення процесу анімації. Цей об'єкт використовується для відображення виконання тривалого процесу, який починається з моменту включення таймера. Його властивості Міп та Мах — значення діапазону зміни. Властивість Position містить поточне значення величини (рис. 22).
10. Встановити об'єктам такі властивості (табл. 3).
Компонент |
Вкладка вікна Object Inspector |
Properties / Events |
Значення властивості/обробка події (тіло процедури обробки події) |
Animate1 |
Properties |
Active |
False |
AutoSize |
True |
||
Visible |
False |
||
Timer1 |
Properties |
Interval |
500 |
Enabled |
False |
||
ProgressBar1 |
Properties |
Visible |
False–на початку роботи програми компонент невидимий |
Max |
10 |
11. Для кнопки «Готово» створити процедуру обробки події OnClick:
Label1.Font.Color:=clblue;
Label1.Caption:='Щасливої дороги!';
Animate1.FileName:=’C:\Program Files\MicrosoftOffice\media\officel0\MMEDIA\Firework.avi';
Animatel.Active:=True;
Animate1.visible:=True;
Timer1.Enabled:=True;
ProgressBar1.Visible:=True;
ProgressBar1.show;
12. Для таймера створити процедуру обробки події OnTimer (для цього у вікні Інспектор об'єктів на вкладці Events (Події) двічі клікнути у полі праворуч від події OnTimer):
ProgressBar1.Position:=ProgressBar1.Position+1;
if ProgressBar1.Position>=ProgressBar1.max then
begin
Timer1.enabled:=False;
ProgressBar1.Position:=0;
ProgressBar1.hide;
Animate1.Stop;
end;
13. Зберегти проект в папці D:\Delphi\Pract_17.
14. Запустити проект та перевірити правильність його виконання (рис. 22).
Завдання для самостійного виконання
1. Помістити на форму кнопку «Повторити», натискання на яку забезпечувало б нове розміщення фігур та можливість повторного конструювання малюнка.
Підказка. Для форми Forml створити процедуру опрацювання події OnCreate, що містила б процедуру: Randomize;
Для кнопки «Повторити» створити процедуру опрацювання події OnClick, в якій для компонентів, що пересуваються, установити нові значення властивостям Left і Тор, використавши при цьому функцію Random.
2. Доповнити програму можливістю розфарбовувати фігурки, з яких складається машинка.
Підказка. Розмістити на формі компонент ColorDialog1 (вкладка палітри компонентів Dialogs). Для всіх деталей машини Shapel- Shape5 створити свою процедуру опрацювання події OnConTextPopup — виклик праною кнопкою миші контекстного меню. В цій процедурі розмістити оператори по роботі зі стандартним діалоговим вікном вибору кольору:
procedure TForml.ShapelConTextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
if ColorDialogl.Execute then Shapel.Brush.Color:= ColorDialogl.Color;
end;
3. Доповнити програму рухом машинки за натисканням на кнопку «Готово».
Підказка. Розмістити в процедурі TForm1. Timer1Timer зміну значення властивості Left компонента Panel1.
Лістинг програми:
unit Unitl;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, jpeg, StdCtrls, Buttons, ComCtrls;
type
private
public
end;
var
Forml: TForml;
x1,y1:integer;
flag:boolean=False;
implementation {$R *.dfm}
procedure TForm1.ShapeIMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
x1:=x;у1:=y; flag:=True;
end;
procedure TForml.ShapelMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if flag then with TShape (sender) do begin Left:=Left+x-x1; Top:=Top+y-y1; end;
end;
procedure TForml.Shape1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
flag:=False; end; {процедури для пересування компонентів Shape2-Shape5, Image1, Label2}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Label1.Font.Color:=clblue;
Label1.Caption: = ‘Щасливої дороги!';
Animate1.FileName:=’С:\ProgramFiles\MicrosoftOffice\media\office10\MMEDIA\Firework.avi';
Animate1.Active:=True;
Animate1.visible:=True;
Timer1.Enabled:=True;
ProgressBar1.Visible:=True;
ProgressBar1.show;
end;
procedure TForm1.TimerlTimer(Sender: TObject);
var
h:integer;
begin
ProgressBar1.Position:=ProgressBar1.Position+1;
h:=round(Panel1.Width/ProgressBar1.Max);
If Shape1.Left<Shape2.Left then Panel1.Left:=Panel1.Left-h {рух машинки}
else Panel1.Left:=Panel1.Left+h;
if ProgressBarl.Position>=ProgressBar1.max then
begin
Timer1.enabled:=False;
ProgressBar1.Position:=0;
ProgressBar1.hide;
Animate1.Stop;
end;end;
procedure TForm1.BitBtn2Click(Sender: TObject); {натискання на кнопку «Повторити»}
begin
Label1.Caption:='Збери і розфарбуй машинку. Завантаж мишку на машинку та натисни "Готово"';
PanelI.Left:=0;
Image1.Top:=random(Panel1.Height)+10; Image1.Left:=random(Panel1.Width)+10;
Label2.Top:=random(Panel1.Height)+10; Label2.Left:=random(Panel1.Width)+10;
Shape1.Top:=random(Panel1.Height)+10; Shape1.Left:=random(Panel1.Width)+10;
Shape2.Top:=random(Panel1.Height)+10; Shape2.Left:=random(Panel1.Width)+10;
Shape3.Top:=random(Panel1.Height)+10; Shape3.Left:=random(Panel1.Width)+10;
Shape4.Top:=random(Panel1.Height)+10; Shape4.Left:=random(Panel1.Width)+10 ;
Shape5.Top:=random(Panel1 . Height)+10; Shape5.Left:=random(Panel1.Width)+10;
end;
procedure TForml1.Shape1ConTextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); {виклик правою кнопкою мишки стандартного діалогового вікна вибору кольору для Shape1}
begin
if ColorDialog1.Execute then Shape1.Brush.Color:= ColorDialog1.Color;
end; {виклик стандартного діалогового вікна вибору кольору для Shape2-Shape5}
procedure TForm1.FormCreate(Sender: TObject); begin
randomize;
end; end.
4. Створити проект, у якому з набору будівельних елементів користувач може побудувати будинок, потяг, комп'ютер, шпаківню тощо.