русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Основные понятия и элементы языка 6 страница


Дата додавання: 2014-11-28; переглядів: 792.


5. Запрограмуйте блимання повідомлення „Обо­в’я­зково
натисніть на кнопку Готово після розміщення малюнків !!!”.

Двічі клацніть на першому таймері (Timer1) і запрограмуйте блимання повідомлення так:

procedure TForm1.Timer1Timer(Sender: TObject);

begin

if Label1.Visible=True then Label1.Visible:=False else Label1.Visible:=True;

end;

6. Введіть описи глобальних констант та змінних програми.

Для цього перед розділом реалізації implementation додайте такий програмний код:

const k=4; {Кількість оновлень змісту тесту}

a : array[1..k, 1..3] of string=( {Масив малюнків}

(’car.wmf’, ’money.wmf’, ’bomb.wmf’),

(’coins.wmf’, ’clock.wmf’, ’tennis.wmf’),

(’brick.wmf’, ’building.wmf’, ’champagne.wmf’),

(’dice.wmf’, ’donkey.wmf’, ’door.wmf’));

b : array[1..k, 1..3] of string=( {Масив слів}

(’money’, ’car’, ’bomb’), (’tennis’, ’clock’, ’coins’),

(’building’, ’champagne’, ’brick’), (’dice’, ’door’, ’donkey’));

{Таблиця відображення масиву малюнків у масив слів. Число – номер малюнка до слова}

check : array[1..k, 1..3] of integer=((2, 1, 3), (3, 2, 1), (3, 1, 2), (1, 3, 2));

var Form1 : TForm1; {Цей рядок вже є в заготовці модуля}

i, score : integer;

shiftX, shiftY : integer;

left1, left2, left3 : integer;

top1, top2, top3 : integer;

7. Збережіть створену на даний момент форму у своїй папці.

Для цього виберіть команду головного меню File – Save All (Збе­регти Все) або натисніть на кнопку Save All панелі інстру­ментів. У першому рядку вікна, яке з’явиться (Save Unit1 As) під заголовком Save in: (Зберегти в:), за допомогою випадаючо­го меню виберіть ім’я ро­­бо­чого диска, після чого знайдіть і відкрийте свою власну папку. Задайте назву для фай­лу тек­с­ту програми, попередньо знищивши запропоновану комп’ютером назву Unit1.pas, PRGRM28.pas Þ Save. У наступному вікні Save Project1 As дайте назву файлові проекту, стерши запропоновану комп’ютером назву Project1.dpr, PRJCT28.dpr Þ Save. У подальшому періодично, зокрема перед черговими запусками проекту на виконання, зберігайте файли програми (File – Save All, вводити імена файлів вже не потрібно).

8. Запрограмуйте процедури: створення форми FormCreate,
вставляння у неї малюнків SetPicture, виведення інформації
про результат тесту Information та кнопку BitBtn2.

procedure TForm1.FormCreate(Sender: TObject);

begin

i:=0; {Номер оновлення змісту тесту}

score:=0; {Набрані користувачем бали }

{Зберігаємо початкові координати лівих верхніх кутів трьох малюнків у формі}

left1:=Image1.Left; left2:=Image2.Left; left3:=Image3.Left;

top1:=Image1.Top; top2:=Image2.Top; top3:=Image3.Top;

SetPicture; end; {Процедура і-го вставляння малюнків}

procedure SetPicture;

begin

{Доки малюнки не розташовані правильно – кнопка „Готово” недоступна}

Form1.BitBtn1.Enabled:=False;

i:=i+l; {Збільшуємо номер серії малюнків}

if i > = k+1 then Information

{Якщо тест закінчено, то виводимо результати (процедура Information)}

else {Інакше}

begin

Form1.Label2.Caption:=b[i, 1]; {Оновлюємо слова}

Form1.Label3.Caption:=b[i, 2];

Form1.Label4.Caption:=b[i, 3];

Form1.Image1.Picture.LoadFromFile(a[i, 1]); {Оновлюємо малюнки}

Form1.Image2. Picture.LoadFromFile(a[i, 2]);

Form1.Image3. Picture.LoadFromFile(a[i, 3]);

{Оновлюємо індикатор часу на 100%}

Form1.Gauge1.Progress:=Form1.Gauge1.MaxValue;

{Розташовуємо малюнки під фігурами}

Form1.Imagel.Left:=left1; Forml.Image2.Left:=left2;

Form1.Image3.Left: =left3; Form1.Imagel.Top:=top1;

Form1.Image2.Top: =top2; Form1.Image3.Topr:=top3;

end; end;

procedure Information;

begin

{Зупиняємо обидва таймери}

Form1.Timer1.Enabled:=False; {Зупиняємо блимання Label1}

Forml.Timer2.Enabled:=False; {Зупиняємо рух індикатора часу}

{Результат тесту приводимо до 100 балів}

score:=(score*l00) div k;

{Якщо результат > 90 – зчитуємо файл гучного аплодування}

if score > 90 then Form1.MediaPlayer1.FileName:=’applause.wav’;

{Якщо результат між 70 і 90 – зчитуємо файл легкого аплодування}

if (score > 70) and (score < 90) then Form1.MediaPlayer1.FileName:=’clap.wav’;

{В інших випадках файл не зчитується і аплодування не буде}

Form1.MediaPlayer1.Open; {Відкриваємо мультимедійний плеєр}

Form1.MediaPlayer1.Play; {Відтворюємо звук}

{Відкриваємо вікно повідомлення „Ви набрали # # балів зі 100”}

MessageDlg(’Bи набрали’ + IntToStr(score) + ’балів зі 100’, mtInformation, [mbOk], 0);

{Після клацання на кнопці „Ok” інформаційного вікна}

Form1.Close; end; {Закриваємо вікно програми – закінчуємо роботу}

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

Information; end;

Процедури Information і SetPicture не є методами класу Form1. Тому зміна властивостей будь-яких об’єктів форми відбувається в них шляхом явного зазначення імені форми Form1 перед іменем відповідного об’єкта. Декларації процедур Information і SetPicture вста­в­те між описом типу TForm1 і розділом під’єднаних модулів uses:

procedure Information;

procedure SetPicture;

9. Забезпечте перетягування першого малюнка (Image1) на формі,
запрограмувавши опрацювання таких трьох подій для об’єкта Image1: OnMouseDown (якщо натиснути мишу), OnMouseMove (якщо
переміщати мишу) та OnMouseUp (якщо відпустити мишу).

Для заповнення заготовок наведених процедур скористайтесь закладкою Events вікна інспек­тора об’єктів першого малюнка.

procedure TForm1.Image1MouseDown(Sender: TObject; Button:

TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

{Тимчасова змінна Tag об’єкта Image1=1, якщо клавіша миші в цей момент натиснута}

Image1.Tag:=l;

{Запам’ятовуємо координату (Х; У) точки клацання мишею всередині малюнка}

shiftY:=Y; shiftX:=X; end;

procedure TForm1.Image1MouseMove(Sender: TObject;

Shift: TShiftState; X,Y: Integer);

begin

if Image1.Tag=l then {Якщо натиснута клавіша миші}

begin

{Змінюємо координати малюнка на величину зміни координати вказівника

миші (X;Y) з урахуванням його зміщень всередині малюнка shiftX, shiftY}

Image1.Top:=Image1.Top+Y–shiftY; Image1.Left:=Image1.Left+X–shiftX;

end; end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Image1.Tag:=0; {Запам’ятовуємо, що клавіша миші відпущена}

end;

Зверніть увагу, що програма не перевіряє, на яку саме клавішу миші натиснув користувач, і тому перетягування можна здійснювати довільною клавішею. Перевірити клавіші миші можна, проаналізувавши аргумент Button (типу TMouseButton) наведених процедур: Button={mbLeft (ліва клавіша), mbRight (права), mbMiddle (середня)}. Координати вка­зів­ни­ка миші у пікселях передаються у процедури за допомогою аргументів X і Y типу Integer.

10. Аналогічно запрограмуйте події OnMouseDown, OnMouseMove та OnMouseUp для перетягування двох інших малюнків (Image1, Image2).

11. Створіть ще один метод форми Form1 – функцію ImageInShape
для перевірки розташування малюнка (об’єкта Image) всередині
деякої геометричної фігури (об’єкта Shape).

function TForm1.ImageInShape(Image: TImage; Shape: TShape) : Boolean;

begin

if (Image.Left > = Shape.Left) and (Image.Left+Image.Width < = Shape.Left+Shape.Width) and

(Image.Top > = Shape.Top) and (Image.Top+Image.Height < = Shape.Top+Shape.Height)

then ImageInShape:=True {Малюнок є всередині фігури}

else ImageInShape:=False; end; {Малюнок є поза фігурою}

Функція ImageInShape є методом класу Form1, тому звертання до властивостей будь-яких об’єктів форми Form1 здійснюється безпосередньо за допомогою імені цих об’єктів. Де­кларацію функції вставте у розділ опису форми type TForm1 у секцію декларацій зага­ль­но­доступних процедур після службового слова public:

function ImageInShape(Image: TImage; Shape: TShape) : Boolean;

12. Запрограмуйте кнопку „Готово”, яка перевіряє правильність
розташування малюнків всередині фігур.

procedure TForm1.BitBtn1Click(Sender: TObject);

var check1 ,check2, check3 : integer;

begin

{Де знаходиться перший малюнок ?}

if ImageInShape(Image1, Shape1) then check1:=1; {В 1-ій фігурі}

if ImageInShape(Image1, Shape2) then check1:=2; {В 2-ій фігурі}

if ImageInShape(Image1, Shape3) then check1:=3; {В 3-ій фігурі}

{Де знаходиться другий малюнок ?}

if ImageInShape(Image2,Shapel) then check2:=l; {В 1-ій фігурі}

if ImageInShape(Image2,Shape2) then check2:=2; {В 2-ій фігурі}

if ImageInShape(Image2,Shape3) then check2:=3; {В 3-ій фігурі}

{Де знаходиться третій малюнок ?}

if ImageInShape(Image3,Shapel) then check3:=1; {В 1-ій фігурі}

if ImageInShape(Image3,Shape2) then check3:=2; {B 2-ій фігурі}

if ImageInShape(Image3,Shape3) then check3:=3; {B 3-ій фігурі}

{Якщо малюнки розташовано правильно, то рахуємо вдалі спроби}

if (check[i, l]=check1) and (check[i, 2]=check2) and (check3=check[i, 3])

then score:=score+1;

SetPicture; end; {Встановлюємо нові малюнки}

13. Запрограмуйте другий таймер, який забезпечує доступність кнопки „Готово” лише у випадку правильного розташування всіх малюнків
у відведених прямокутниках та індукує час зі швидкістю, обернено пропорційною до числа в SpinEdit1.

У випадку, коли користувач не встиг розташувати малюнки у прямокутниках і натиснути на кнопку „Готово” за належний час, подається звуковий сигнал, спроба не зараховується, і відбу­вається перехід до наступної серії малюнків.

procedure TForml.Timer2Timer(Sender: TObject);

begin

Timer2.Interval:=SpinEdit1.Value*100; {Задаємо швидкість руху індикатора}

{Якщо один із малюнків є в першому прямокутнику}

if ( ImageInShape(Image1, Shape1) or ImageInShape(Image2, Shape1)

or ImageInShape(Image3, Shape1) ) and

{і один із малюнків є в другому прямокутнику}

( ImageInShape(Image1, Shape2) or ImageInShape(Image2, Shape2)

or ImageInShape(Image3, Shape2) ) and

{і один із малюнків є в третьому прямокутнику}

( ImageInShape(Image1, Shape3) or ImageInShape(Image2, Shape3)

or ImageInShape(Image3, Shape3) )

then BitBtn1.Enabled:=True; {то кнопка „Готово” стає доступною}

Gauge1.Progress:=Gauge1.Progress–l; {Працює індикатор часу}

if Gauge1.Progress=0 then

{Якщо час вичерпано, подаємо звуковий сигнал та міняємо серію малюнків}

begin

MediaPlayer1.FileName:=’ding.wav’; MediaPlayer1.Open;

MediaPlayer1.Play; SetPicture; end; end;

14. Збережіть виконану на даний момент роботу у своїй папці.

Для цього виконайте команду: File – Save All.

15. Скопіюйте музичні файли ding.wav, applause.wav та clap.wav у свою робочу папку з папки С: \ Windows \ Media \ Office.

16. Скопіюйте малюнки car.wmf, money.wmf, bomb.wmf, coins.wmf, clock.wmf, tennis.wmf, brick.wmf, building.wmf, champagne.wmf, dice.wmf, donkey.wmf, door.wmf у свою робочу папку з папки С: \ Program Files \ Microsoft Office \ Clipart \ Popular.

17. Запустіть створену програму і дослідіть її роботу.

Запустити програму на виконання можна декількома способами: виконати команду Run – Run головного меню; клацнути на кнопці Run панелі інструментів; натиснути на функціо­нальну клавішу F9. Перетягуйте мишею малюнки всередину відповідних фігур.

18. Створіть exe – файл програми.

Виконайте команду головного меню Project – Build All.

19. Вийдіть із середовища Delphi та запустіть створену програму.

Запустіть exe – файл з іменем проекту зі своєї власної папки.

20. Продемонструйте створений проект викладачеві.

21. Закрийте всі відкриті вікна. Завершіть роботу. Здайте звіт.

 

Контрольні запитання:

1. Яким чином можна створити новий проект у середовищі Delphi ?

2. Яким чином можна зберегти проект у середовищі програмування Delphi ?

3. Яким чином можна виконати компіляцію проекту в Delphi ?

4. Що представляє собою редактор коду програми середовища Delphi ?

5. Що представляє собою наступний об’єкт середовища Delphi: BitBtn ?

6. Що представляє собою наступний об’єкт середовища Delphi: SpinEdit ?

7. Що представляє собою наступний об’єкт середовища Delphi: Image ?

8. Що представляє собою наступний об’єкт середовища Delphi: Shape ?

9. Що представляє собою наступний об’єкт середовища Delphi: Gauge ?

10. Що представляє собою наступний об’єкт середовища Delphi: MediaPlayer ?

11. Що представляє собою наступний об’єкт середовища Delphi: Timer ?

12. Що представляє собою наступний об’єкт середовища Delphi: ProgressBar ?

13. Які властивості має наступний об’єкт середовища Delphi: SpinEdit ?

14. Які властивості має наступний об’єкт середовища Delphi: Shape ?

15. Які властивості має наступний об’єкт середовища Delphi: Gauge ?

16. Які властивості має наступний об’єкт середовища Delphi: Timer ?

17. Які властивості має наступний об’єкт середовища Delphi: BitBtn ?

18. Як можна змінювати властивості об’єктів (компонентів) у Delphi ?

19. Яким чином можна реалізувати цикли у мові Object Pascal ?

20. Які стандартні події виникають під час роботи у середовищі Delphi ?

 

Студенти повинні знати:

1. загальну характеристику середовища візуального програмування Delphi;

2. основні принципи роботи у середовищі візуального програмування Delphi;

3. загальну характеристику компонентів середовища Delphi;

4. основні принципи побудови навчальних програм та їх алгоритмів;

5. оператори, операції, типи даних та стандартні
процедури і функції мови програмування Object Pascal;

6. стандартні події і властивості компонентів середовища Delphi,
їх призначення та основні принципи використання.

 

Студенти повинні вміти:

1. працювати у середовищі візуального програмування Delphi;

2. ефективно використовувати основні інструменти середовища
програмування для роботи у Delphi з проектами та компонентами;

3. здійснювати вибір необхідних компонентів для побудови проекту;

4. ефективно використовувати властивості компонентів
при роботі з проектами у середовищі програмування Delphi;

5. створювати, редагувати, виконувати тестування та
налагодження навчальних програм (проектів)
у середовищі візуального програмування Delphi.

 

Порядок оформлення звіту:

Звіт повинен складатися з наступних частин:

1. Тема роботи.

2. Мета роботи.

3. Хід роботи.

4. Висновки до роботи.

 

Практична робота №29

 

Створення власних об’єктів у середовищі Delphi.

 

Мета: Навчитися користуватися основними елементами інтерфейсу середовища програ­му­вання Delphi для побудови, редагуван­ня, налагодження та виконання програм (проектів) для створення об’єктів і роботи з ними.

 

Прилади, обладнання та інструменти:

Для виконання практичної роботи використовується ПК з наступним програмним за­безпеченням: операційна система Windows XP; середовище Delphi.

 

Теоретичні відомості:

 

Опис гри:

Суть гри полягає у стрільбі в ціль, яка хаотично руха­ється по мі­ше­ні, що яв­ляє собою десять концентричних кіл. Ціл­лю є прямокутник із заокру­гленими ку­та­ми, який може вийти із зони стрільби (за край мішені). Постріл здійснюється натисканням на кла­вішу Enter чи клацанням мишею, після чого засвічується ви­пад­кова точка в певному околі відносно центру цілі. Після кожного влучення у прямокутник гра призупиняється і програма інформує гравця про влучення. Після виходу прямокутника за межі зони стрільби гра при­пиняється і гравець отримує повідомлення про сумарну кількість влу­чень у ціль.

 

Останні версії мови Pascal і мова програмування Object Pascal, що вико­ри­с­то­вується у системі візуального програмування Delphi дають можливість опрацьо­ву­вати новий тип даних – об’єкти. З об’єктами асоціюються такі поняття: інкапсу­ляція, успадкування, поліморфізм.

Інкапсуляція Ідея об’єкта полягає в об’єднанні даних і алгоритмів їх опра­цю­­вання. Дані називаються полями об’єкта, алгоритми – ме­тодами, а власне об’єд­нання – інкапсуляцією. Методи призначені для опрацювання полів і зовніш­ніх даних, власне вони реалізують ідею об’єк­та. Створення нового об’єкта анало­гічне до створення нового запису:

type < назва об’єкта > = object

< специфікатор доступу >

< поля об’єкта 1> : < тип полів 1 >;

< поля об’єкта N> : < тип полів N >;

< декларації методів об’єкта >; end;

Методами об’єкта є функції та процедури, які визначені для полів чи зов­ніш­ніх змінних. Є такі специфікатори доступу до них: private – доступність лише для методів об’єкта; protected – доступність лише для методів об’єкта та методів похідних об’єктів; public – доступність для всіх зовнішніх функцій. В описі об’єк­та специфікатор доступу може бути не зазначений. То­ді актив­ним вважається специфікатор private, доки явно не заданий інший. Директива private дає доступ до полів і методів об’єкта іншим методам цього об’єкта і зов­ніш­нім процедурам лише того самого модуля чи програми. Директива public забезпечує доступність еле­ментів об’єкта для процедур з інших модулів. Компо­нен­ти, описані як protected, доступні лише для методів цього об’єкта і його нащадків.

Процедуру створення об’єкта називають конструктором і за­мість службо­во­го слова procedure використовують слово constructor. У більшості випадків конст­руктор має назву Create. Конструктор ство­рює екземпляр об’єкта і заповнює його поля конкретними значеннями.

Методи об’єктів описують у розділі реалізацій implementation так:

procedure < назва об’єкта > . < назва методу > (< список формальних параметрів >);

begin < тіло методу > end ;

У розділі implementation опису методів певного об’єкта виклик ін­ших мето­дів цього ж об’єкта здійснюється лише за ім’ям, без зазначення назви об’єкта. Водночас виклик методу із зовнішньої процедури здійснюється лише за допомо­гою команди доступу „ . ” (крапка) так:

< назва об’єкта > . < назва методу > (< список фактичних параметрів >);

Змінну типу об’єкт оголошують у розділі оголошення змінних:

var < назва змінної > : < назва об’єкта >;

До даних типу об’єкт, як і до записів, можна застосовувати команду приєд­нан­ня with: with < назва об’єкта > do < оператор >;

Успадкування Об’єкти володіють властивістю успадкування, яка за­без­печує використання об’єктом-нащадком (надалі – похідним об’єктом) полів і ме­тодів базового об’єкта (предка, батьківського об’єкта). Успадковування здійс­ню­ється так:

type < назва нащадка > = object (< назва батьківського типу >)

< додані поля об’єкта > : < тип полів >;

< декларації доданих і перевизначених методів >; end;

Таблиця, для визначення можливості доступу до елементів похідного об’єк­та:

 

доступ у базовому об’єкті специфікатор доступу успадкування доступ у похідному об’єкті
public public public
private public недоступний
protected public protected
public private private
private private недоступний
protected private private


Кожний об’єкт може мати довільну кількість нащадків, що дає змогу ство­рю­­вати ієрархічні дерева успадкування.

Поліморфізм Поліморфізм – це можливість використовувати однакові іме­на для методів різних об’єктів (по лінії предок-нащадок). Нащадок може „ пе­ре­кривати ” деякі методи предка, і тоді методи з однаковими іменами для різних об’єктів виконуватимуться по-різному. У програмному коді успадкованого об’єк­т­ного методу, який перевизначається, виклик батьківського методу здійсню­ється за допомогою службового слова inherited (успадкований) так:

inherited < назва методу > (< список фактичних параметрів >);

Виклик успадкованого методу без зазначення назви методу та па­раметрів „ inhe­ri­ted; ” означає, що викликається батьківський метод з тим же набором фактичних параметрів, що і в методі, з якого відбувається виклик. Виклик батьківського методу можна здійснити і явним способом із зазначенням назви методу:

< назва об’єкта > . < назва методу > (< список фактичних параметрів >).

Аналіз задачі та побудова об’єктів

Для реалізації точки створимо об’єкт TPoint, який міститиме компонент се­ре­довища Delphi типу TShape, його координати і такі методи: засвічування, га­сін­ня і переміщення точки. Змінна типу TShape реалізує точку, якщо вона задає ко­ло з радіусом в один піксель. Тому опис об’єкта TPoint має такий вигляд:

TPoint = object

private

х, у : integer; {координати}

figure : TShape;

public

constructor Create(a, b : integer; owner : TWinControl);

{ініціалізує поля координат числами а і b; owner – об’єкт, на якому рисується точка}

procedure Show; {малює точку поточним кольором}

procedure Hide; {витирає точку}

procedure Draw(vis : boolean); virtual;

{віртуальна процедура, яка використовується методами Show і Hide}

procedure Set_Color(color : TColor);

procedure Move(dx, dy : integer); end; {Переміщує точку на dx праворуч і на dy вниз}

Конструктор Create створює екземпляр об’єкта TPoint і заповнює його поля х та у конкретними значеннями. Значення полів об’єкта зміню­ються лише за до­по­могою методів. Наприклад, після створення точки змінити її координати можна лише за допомогою методу Move.

Опишемо методи створеного об’єкта:

constructor TPoint.Create(a, b : integer; owner : TWinControl);

begin

figure:=TShape.Create(nil); {створюємо об’єкт TShape}

figure.Parent:=owner; {розміщуємо його на owner}

figure.Visible:=false; {„гасимо” його до виклику методу Show}

х:=а; у:=b; end; {запам’ятовуємо координати}

procedure TPoint.Draw(vis : boolean);

begin

with figure do begin {працюватимемо з властивостями об’єкта figure}

shape:=stCircle; {точка – це коло з радіусом 1 піксель}

brush.Style:=bsClear; {коло всередині, не залите кольором}

width:=2; height:=width; {ширина та висота фігури – 2 пікселі}

left:=х–1; top:=у–1; {координати left та top об’єкта figure

розташовані в її лівому верхньому куті, тому зміщуємося туди від

координат (х; у), заданих як центр кола з радіусом 1 піксель}

visible:=vis; end; end; {засвічуємо чи гасимо точку}

procedure TPoint.Set_Color(color : TColor);

begin

figure.Pen.Color:=color; end; {задаємо колір для figure}

procedure TPoint.Show;

begin

Draw(true); end; {засвічуємо точку – коло з радіусом 1 піксель}

procedure TPoint.Hide;

begin

Draw(false); end; {гасимо точку}

procedure TPoint.Move(dx, dy : integer);

begin

Hide; {гасимо точку}

with figure do begin

x:=x+dx; у:=у+dy; end; {зміщуємо координати точки на dx, dy}

Show; end; {засвічуємо точку на новому місці}

Оголосити й використати екземпляр Point об’єкта TPoint можна так:

var Point : TPoint;

begin

Point.Create(25, 10, Form1); {створюється точка в позиції (25, 10) на Form1}

Point.Show; Point.Move(35, 70); Point.Hide;

{точка Point „засвічується” та переноситься на 35 пікселів праворуч

і 70 пікселів вниз, „гаситься”}

або за допомогою динамічних змінних:

var PointPtr : ^TPoint;

begin

New(PointPtr); PointPtr^.Create(250, 100, Form1);

PointPtr^.Show; PointPtr^.Move(35, 70); PointPtr^.Hide; …

Дві команди New(PointPtr); PointPtr^.Create(250, 100, Form1);

можуть бути замінені однією: New(PointPtr, Create(250, 100, Form1)) .

Команду приєднання можна застосувати так:

with Point do begin Create(100, 100, Panel1); Show; Move(50, –10); end;

Проілюструємо механізм успадковування шляхом створення ієрар­хічного дерева об’єктів: „коло”, „квадрат”, „прямокутник”, „еліпс”, „заокруглений квад­рат”, „заокруглений прямокутник”.

Об’єкт TPoint вибрано батьківським, оскільки він має спільні властивості для всіх графічних об’єктів: координати, методи засвічування, гасіння і руху, які будуть успадковані іншими об’єктами. Квадрат та вписане в нього коло визнача­ється центром (точкою) і радіусом (цілим числом). Тому об’єкти TCircle, TSquare та TRoundSqua­re як нащадки об’єкта TPoint будуть доповнені полем цілого типу radius. Прямокутники та еліпс визначаються центром (точкою), шириною і висо­тою. Тому об’єкти TRect, TRoundRect та TEllipse доповнимо цілими полями W і Н для ширини і висоти. Для усіх похідних об’єк­тів реалізації методів Show, Hide та Move – однакові, тому перевизначати їх не потрібно. Конструк­тори та ме­тоди малю­вання усіх успадкованих об’єктів різні. Тому їх необхідно перевизначати.

Оголошення і реалізація об’єкта TCircle має вигляд:

TCircle = object(TPoint)

private

radius : integer; {додано поле для радіуса кола}

public

constructor

Create(a, b, c : integer; owner : TWinControl);

procedure Draw(vis : boolean); virtual; end;

{розділ implementation}

constructor Circle.Create(a, b, c ; integer; owner : TWinControl);

begin {викликаємо конструктор базового класу}

inherited Create(a, b, owner);

radius:=c; end; {зберігаємо радіус}

procedure TCircle.Draw(vis : boolean);

begin

inherited;

with figure do begin {координати фігури задаються її лівим верхнім кутом}

left:=х–radius; top:=у–radius; {ширина і висота дорівнюють двом радіусам}

width:=2*radius; height:=width; end; end;

Службове слово inherited у конструкторі означає виклик бать­ківського кон­ст­руктора Create, який створює об’єкт figure і надає зна­чення успадкованим по­лям X і Y. Зауважимо, що його виклик може бути здійснений і командою TPoint.Create(a, b, ow­ner). Директива inherited у процедурі Draw означає виклик бать­ківської процедури Draw з неявно заданим параметром vis : boolean. Цей вик­лик можна здійснити одним із трьох способів:

1) inherited; 2) inherited Draw(vis); 3) TPoint.Draw(vis);

Оголошення об’єкта TRoundRect має такий вигляд:

TRoundRect = object(TPoint)

private

w, h : integer;

public

constructor Create(a, b, c, d : integer; owner : TWinControl);


<== попередня лекція | наступна лекція ==>
Основные понятия и элементы языка 5 страница | Основные понятия и элементы языка 7 страница


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн