Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

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



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

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

Частина 5.

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

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

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

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

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

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

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

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

unit Unit_N;

i nterface

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.

 

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

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

Частина 6.

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

На формі Form3 розміщають об’єкти, про які йдеться в наступних пунктах:

1. Із закладки win32 вибирають компоненту TStatusBar – в якій планується відображати координати вершин багатокутника і вкладають її на форму (рисунок 50 внизу).

2. У інспекторі об’єктів вибирають властивість Panels (Рисунок 50 – зліва вгорі). Активізують кнопку і отримують відкрите діалогове вікно Editing, яке є відображене на рисунку 51 (зліва).

Рисунок 50.Поява у проекті застосунку нового об’єкту ТStatusBar.

3. Наводять курсор на значок жовтого кольору, тримають поки не зявиться підказка (Add New (Ins)), як це показано на другому зліва зображенні рисунка 51.

Рисунок 51 Діалогове вікно кількості панельок об’єкту ТStatusBar.

4. Клацають на вибраний жовтий значок - з’являється пронумеровани член списку 0 - StatusBar. При наступному клацанні- 1- StatusBar. Доводять до цифри 7 (рисунок 51 правий).

5.Активізують першу панель (нульову) і її властивості Text з допомогою Інспектора об’єктів надають з клавіатури значення А, а властивості width – значення 50 (рисунок 52). Наступній панелі шириною 50 у властивість Text вписують значення В. Далі іншим панелям надають властивості width значення 100, а властивості Text по черзі надають такі значення: X1,Y1,X2,Y2,X3,Y3 (рисунок53).

Рисунок 52 Діалогове вікно кількості панельок об’єкту ТStatusBarі ї їх властивості.

 

Рисунок 53 Статус бар із значеннями властивості Text.

6. На форму виставляють компоненту класу TMemo. За допомогою інспектора об’єктів записують заголовок <X Y>, як показано на рисунку 54.

Рисунок 54 Додано об’єкт класу TMemo.

7. Користуючись процедурами, які представлені у пункті 5 першої частини доповнюють дану програму новою процедурою опрацюванням події OnMouseUp форми Form3:

procedure TForm3.FormMouseUp (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if (ssAlt i n Shift) then

begin

canvas.MoveTo(x,y);

x1:=x; // координата X точки A (рисунок 42)

y1:=y; // координата Y точки A(рисунок 42)

StatusBar1.Panels[2].Text:='x1'+' '+intToStr(x);

StatusBar1.Panels[3].Text:='y1'+' '+intToStr(y);

end;

if (ssShift in Shift) then

begin

canvas.LineTo(x,y);

memo1.Lines.Add(IntToStr(x) +' '+ IntToStr(y));

end

end;

8. Доповнюють програму процедурою, що показуватиме на панелях А і В статусного рядка поточні значення координат курсору під час його переміщення:

procedure TForm3.FormMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

StatusBar1.Panels[0].Text:='А'+' '+intToStr(x);

StatusBar1.Panels[1].Text:='В'+' '+intToStr(y);

end;

9. Запускають командою Run програму і рухаючи курсором по вікні з допомогою мишки переконуються у дієвості – тобто відображення координат курсора у панельках А і В (рисунок 55):

Рисунок 55 На панелях А і В показані поточні координати X =103, Y=528 курсора.

10. Наводять курсор у підібране для першої точки багатокутника місце, натискають клавішу Alt і не відпускаючи її клацають один раз по будь-якій кнопці мишки. На рисунку 56 показано координати цієї точки: x1=514, y=343. Це точка, яка розміщена правіше від об’єкта класу TMemo.

Рисунок 56 На панелях А і В показані поточні координати X =514, Y=343 курсора.і такіж координати при першому клацанні присвоєні першій точці з координатами X1,Y1.

 

11. Вдруге клацають по будь-якій кнопці мишки перед тим навівши курсор у місце розташування другої точки багатокутника. Під час клацання повинна утримуватись натиснутою клавіша Shift. При цьому у полі TMemo появляться координати цієї другої точки X =626, Y =358 (рисунок 57). При наступних клацаннях і утриманні натиснутою клавіші Shift відзначаються полі TMemo координати усіх інших точок багатокутника, а на формі відображається сам цей багатокутник.

Рисунок 57 Відображений на формі багатокутник, у статусній лінійці координати його першої точки, а у об’єкті класу TMemo показані координати усіх інших точок, у тому числі останньої (516,343), яка по суті співпадає з першою (514,343).

12. Іноді доводиться накреслені замкнуті об’єкти заповнювати кольором, або різноманітною штриховкою. Задля заливки штриховкою будь-якого замкнутого графічного об’єкта створюють процедуру опрацювання події OnMouseDown. В тіло процедури вкладають процедуру FloodFill(x,y,canvas.Pen.Color,fsBorder), яка належить властивості canvas. У даній процедурі перші два параметри: X, Y – це координати точки звідки відбувається заливка (властивість Brush) заданим кольором (властивість Color) чи вказаною штриховкою (властивість Style), третій параметр вказує межі, по які відбувається ця заливка – наприклад сlBlack вказуватиме на те, що заливка відбуватиметься до межі окресленої чорним кольором – який наразі використовується за замовчуванням, як колір контуру (Pen.Color), четвертому параметру надають значення fsBorder, завдяки якому заливка відбуватиметься до межі, яка окреслена контуром:

procedure TForm3.FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if (ssCtrl in shift) then

canvas.Brush.Color:=clblue;

canvas.Brush.Style:=bsBDiagonal;

canvas.FloodFill(x,y,canvas.Pen.Color,fsBorder);

end;

13. Запускають команду Run. Здійснюють виконання замкнутої фігури і після того клацають мишкою при натиснутій клавіші Сtrl, перед тим навівши курсор, так щоб він перебував у середині цієї фігури, а не поза нею (рисунок 58).

Рисунок 58 Замкнута фігура заповнена діагональною штриховкою синього кольору.

13.1. Якщо замість рядка canvas.Brush.Color:=clblue, вписати рядок canvas.Brush.Color:=0 то колір штриховки отримають чорний.

13.2 Якщо після побудови замкнутої фігури клацнути мишкою ззовні фігури, то отримають заштрихованою всю зовнішню область вікна програми (рисунок 59).

Рисунок 59 заштрихована область розміщена поза межею фігури.

13.3 Якщо замість параметрів X,Y вказати якісь постійні значення, наприклад: canvas.FloodFill(40,30,canvas.Pen.Color,fsBorder), тоді не важливо де клацати, оскільки для даної фігури точка з координатами 40,30 не є розташованою всередині її, а це означатиме, що заливка відбуватиметься починаючи з цієї точки і до контура чорного кольору. Отож клацаючи мишкою, за будь-яких значень координат курсору, отримають картинку аналогічну до тієї, що на рисунку 59.

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

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

Частина 7

Автоматичне отримання масиву точок побудованого з допомогою мишки багатокутника

1. Додають на форму два об’єкти класу TListBox. Один для розміщення масиву координати Х будованого з допомогою мишки багатокутника, а інший для масиву Y того ж багатокутника.

2. Дописують до коду процедури FormMouseUp нові рядки пов’язані із записом масиву координат Х та масиву координат Y. Тепер тіло підпрограми виглядатиме наступним чином (нові рядки є підкреслені):

begin

if (((x>(x1-10)) and (x<(x1+10))) and ((y<(y1+10)) and (y>(y1-10)))) then

begin

canvas.LineTo(x1,y1);

memo1.Lines.Add(IntToStr(x1) +' '+ IntToStr (Y1));

listbox1.Items.Add(IntToStr(x1));

listbox2.Items.Add(IntToStr (y1));

end

else

begin

canvas.LineTo(x,y);

memo1.Lines.Add(IntToStr (x) +' '+ IntToStr (Y));

listbox1.Items.Add(IntToStr x));

listbox2.Items.Add(IntToStr (y));

end;

end;

3. Запускають прикладну програму командою Run. Будують багатокутник слідкуючи за даними у двох нових об’єктах класу TListBox (рисунок 60).

Рисунок 60 Координати Х і Y занесені у об’єкт класу TMemo. і у два об’єкти класу TListBox

4. У розділ оголошення глобальних змінних дописують оголошення масивів координат:

xa: array [1..100 ] of integer; // масив координат Х багатокутника

ya: array [1..100 ] of integer; // масив координат Y багатокутника

а також дописують змінні xc, yc: integer – координати точки С;

5. Доповнюють програму ще однією кнопкою Button7, при клацанні на яку має відбуватись запис даних із об’єктів listbox1 і listbox2 у масиви xa і ya відповідно.

6. Cтворюють опрацювання події OnClick кнопки Button7.

procedure TForm3.Button7Click(Sender: TObject);

var i,n:integer;

begin

n:=listbox1.GetCount; // GetCount – функція, що вказує на кількість членів списку

for i:=1 to n do

begin

xa[i]:= StrToInt(listbox1.Items[i-1]);

ya[i]:= StrToInt(listbox2.Items[i-1]);

end;

y2:=ya[1]; // координата Y точки B (рисунок 42)

x2:=xa[1]; // координата X точки B (рисунок 42)

yc:=ya[2]; // координата Y точки C (рисунок 42)

xc:=xa[2]; // координата X точки C (рисунок 42)

end;

6. Змінюють процедуру TForm3.Button1Click вкладаючи у її початок фрагмент коду, завдяки якому у об’єктах класу ТSpinEdit встановлюються координати трикутника АВС, що будується за допомогою мишки, тобто побудованого в процесі виконання події FormMouseUp:

SpinEdit1.Value:=x1;

SpinEdit3.Value:=y1;

SpinEdit2.Value:=x2;

SpinEdit4.Value:=y2;

SpinEdit7.Value:=xc;

SpinEdit8.Value:=yc;

7. Примітка: координати точки А x1,y1 це глобальні змінні, значення яким надано у події FormMouseUp (частина 6, пункт7).

8. Включають виконання застосунку (F9) і будують трикутник за допомогою мишки (рисунок 61):

Рисунок 61 Побудова трикутника з допомогою мишки:відображені координати: перша точка А(564,348), друга точка В(522, 340), третя точка С (535,504)

Останнє клацання відбувається околі першої точки, тому останній запис у об’єкті класу TMemo співпадає з координатами першої точки x1,y1.

9. Клацають по кнопці Button7, для того щоб здійснити перезапис координат із обєктів класу TListbox у пам'ять (тобто у масиви xa, ya) і далі клацають по кнопці Button1, щоб показати координати у відповідних об’єктах класу ТSpinEdit (рисунок 62).

Рисунок 62 Побудова трикутника з допомогою мишки:відображені координати і автоматичне відображення його координат після натискання на кнопку Button1.

10.. Здійснюють вибір координати y3 – що є координатою точки В після її повороту навколо базової точки А (тобто точки В1 на рисунках 32, 42). Автоматично отримують координату x3.

11. Клацають по кнопці Button2 і автоматично отримують значення кута a повороту точки В навколо точки А (рисунок 63).

12. Клацають по кнопці Button3 і автоматично отримують значення координат точки С після її повороту на кут a =340 навколо базової точки Аxc1 i yc1 (рисунок 64).

13. Розміщають на вікні форми ще одну кнопку Button8 для копіювання зображного на формі трикутника у поле Image2.

Рисунок 63 Побудова трикутника з допомогою мишки автоматичне відображення його кута a повороту після почергового натискання на кнопки Button7> Button1> вибір y3> Button2.

Рисунок 64 Отримання значення координат xc1 i yc1.

14. Створюють процедуру опрацювання події клацання по кнопці Button8.

 

procedure TForm3.Button8Click(Sender: TObject);

var l: array [0..1] of integer; t: array [0..1] of integer;

begin

{ перенесення значення координат X, Y точок трикутника зображеного на формі у відповідні значення членів масивів координат точок трикутника, що має бути відображений на об’єкті Image2 }

l[0]:=xa[1];

l[1]:=xa[2];

t[0]:=ya[1];

t[1]:=ya[2];

{вкладення процедури figure_point (частина 5, пункт 14)}

figure_point(Image2,x1,y1,1,l,t);

end;

15. Запускають команду Run, будують трикутник, клацають по кнопці Button7, потім по Button1 і нарешті копіюють його клацнувши на кнопці Button8 (рисунок 65).

Рисунок 65 Отримання копії триктнмка в полі Image2.

16. Зауваження: трикутник будують зліва – вгорі форми, для того щоб координати його вершин не отримали надто великі значення і при копіюванні не вийшли за межі об’єкта Image2.

 


Дата добавления: 2015-09-30; просмотров: 20 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
American Airlines and US Airways await approval of $11bn merger | Инвестиционное предложение от проекта «CarVid».

mybiblioteka.su - 2015-2024 год. (0.043 сек.)