Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
mause_canvas1.doc
Скачиваний:
1
Добавлен:
15.09.2019
Размер:
32.21 Mб
Скачать

« Автоматизація проектування графічного плану виробничого приміщення »

Частина 5.

Створення процедури побудови трикутника.

1.У третій частині даного зразка застосунку вже йшлося про застосування спеціальної процедури figura1_show для створення фігури у плані. За аналогією з тією підпрограмою закодовують процедуру figure_point побудови трикутника. Для цього у новоствореному модулі Unit_N дописують розділ uses і поміщають у ньому декларацію ExtCtrls – модуля у якому є оголошений і прописаний клас TImage.

2. Оголошують процедуру figure_point із параметрами:

Senderдля вибору об’єктів, на канві яких відображатиметься фігура.

а,bкоординати початкової точки побудови;

Xмасив координат х усіх точок фігури;

Y - масив координат y усіх точок фігури;

3. Описують тіло процедури у розділі implementation .

unit Unit_N;

interface

uses ExtCtrls;

procedure figure_point (Sender:TObject; a,b: integer; x:array of integer; y:array of integer);

implementation

procedure figure_point (Sender: TObject; a,b:integer;x: array of integer;y: array of integer);

begin

with (Sender as TImage).Canvas do

begin

moveto(a,b); (перша точка трикутника)

lineto(x[0],y[0]); // перша точка масиву (друга точка трикутника)

lineto(x[1],y[1]); // друга точка масиву (третя точка трикутника)

lineto(x[a],y[b]);//повернення у першу точку масиву (перша точка трикутника)

end;

end;

end.

4. Відкривають проект нового вікна форми File > New > Form і вставляють на нього дві кнопки ТButton і два об’єкти класу TImage .

Рисунок 44. Дизайн проекту з двома обєктами класу TImage .

5. У розділ uses модуля, що супроводжує щойно долучену форму дописують Unit_N.

6. Задля пробної програми створюють процедуру опрацювання події OnClick кнопки Button4:

procedure TForm3.Button4Click(Sender: TObject);

var

L: array of integer;

R: array of integer;

begin

figure_point(Image1,10,10,l,r);

end;

7. Для перевірки цього пробного коду запускають команду Run і клацають по кнопці Button4. Спостерігають за змінами, які сталися (рисунок 45):

- На обєкті Image1 відобразився промінь з початком у точці (10,10).

- Промінь нахилений під кутом 450 оскільки величини l і r є однаковими масивами нескінченої кількості членів, а це значить, що процедура lineto(x[1],y[1]), як і наприклад lineto(x[15],y[15]) спрямовує побудову відрізка у точку, що рівновіддалена від верху об’єкта і від лівого боку об’єкта. Це також означає і те, що хоч масиви складаються з цілих чисел, але ці числа не є вказані, а відповідно, як перший член масиву так і п’ятнадцятий можуть бути як завгодно великими цілими числами. Тому побудований відрізок це по суті промінь, який побудований у межах об’єкту Image1 .

Рисунок 45. Відображення на обєкті класу TImage променя нахиленого під куом 450.

8. Якщо у тілі процедури figure_point залишити тільки рядок (Sender as TImage).Canvas. lineto(x[0],y[0]) , то результат події OnClick кнопки Button4 буде відрізнятисявід того що на рисунку 45, тільки тим, що побудова почнеться з точки (0,0), (рисунок 46).

Рисунок 46 . Відображення на об’єкті класу TImage прямої нахиленої під куом 450.

8. Створюють опрацювання події клацання по кнопці Button4 на новий лад, тобто конкретизують кількість членів масивів і їх значення:

procedure TForm3.Button4Click(Sender: TObject);

const L: array [0..1] of integer=(171,87) ;

const R: array [0..1] of integer=(24,167) ;

begin

figure_point(Image1,10,10,l,r);

end;

9. Запускають командою Run цю підпрограму, не забуваючи перед тим проконтролювати, щоб процедура figure_point мала вигляд, як у пункті 3.

10. Клацають по кнопці Button4 і отримують побудований за даними координатами трикутник.

Рисунок 47. Відображення на обєкті класу TImage трикутника побудованого за точками (10,10), (171,24), (87,167)

11. Доповнюють тіло процедури Button4Click двома кодовими рядками (їх записують першими):

Image1.Canvas.Brush.Color := Color; // колір пензля набув значення кольору тла форми

Image1.Canvas.FillRect(Image1.Canvas.ClipRect); // усе прямокутне тло Image1заповнюється повністю певним кольором пензля.

12. Запускають підпрограму і клацають по кнопці Button4. В результаті білий фон об’єкта став таким , як фон вікна форми (рисунок 48).

Рисунок 48. Відображення на обєкті класу TImage трикутника побудованого за точками (10,10), (171,24), (87,167) . Тло обєкта співпадає з фоном форми.

13. Якщо у коді процедури здійснити зміни серед констант в такий спосіб:

const L:array [0..3] of integer=(171,87,45,78) ;

const t:array [0..3] of integer=(24,167,34,90) ;

тобто долучити ще по два члени масиву, то все одно результат події буде таким самим, як на рисунку 48. Адже процедурою figure_point передбачена побудова окрім першої точки, ще тільки двох інших точок з відповідних масивів.

14. Якщо доповнити процедуру figure_point ще двома точками масиву (нижче вони підкреслені):

(Sender as TImage).Canvas.moveto(a,b);

(Sender as TImage).Canvas.lineto(x[0],y[0]);

(Sender as TImage).Canvas.lineto(x[1],y[1]);

(Sender as TImage).Canvas.lineto(x[2],y[2]);

(Sender as TImage).Canvas.lineto(x[3],y[3]);

(Sender as TImage).Canvas.lineto(a,b);

то у результаті виконання події буде збудована інша фігура – багатокутник на п’ять точок.(рисунок 49)

Рисунок 49. Відображення на обєкті класу TImage багатокутника, побудованого за точками (10,10), (171,24), (87,167, (45,34), (78,90) . Тло об’єкта співпадає з фоном форми

14. Переписують процедуру figure_point з метою надання можливості її використання для побудови багатокутників з n - кількістю вершин.

procedure figure_point(Sender:TObject; a,b,n: integer; x: array of integer;

y: array of integer);

var i:integer;

begin

with (Sender as TImage).Canvas do

begin

moveto(a,b);

for i := 0 to n do

lineto(x[i],y[i]);

lineto(a,b);

end;

end;

15. Процедуру Button4Click переписують, так щоб була застосована нова сигнатура , тобто вказана кількість точок – вершин багатокутника n. Згідно з вище показаним кодом число n – це загальна кількість вершин мінус перша точка з координатами a,b і мінус перший, тобто нульовий член масиву.

procedure TForm3.Button4Click(Sender: TObject);

const

L: array [0..3] of integer=(171,87,45,78) ; // координати Х чотирьох наступних вершин

t: array [0..3] of integer=(24,167,34,90) ; // координати Y чотирьох наступних вершин

begin

Image1.Canvas.Brush.Color := Color;

Image1.Canvas.FillRect(Image1.Canvas.ClipRect);

figure_point (Image1,10,10,3,l,t);

{ перша вершина з координатами (10,10) і чотири наступні вершини [0..3] з координатами вказаними в розділі оголошення констант.}

end;

16.Запускають підпрограму і клацають по кнопці Button4. В результаті отримують зображення, таке ж як на рисунку 49.

З Зразок створення застосунку

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]