With canvas do
Begin moveto(x,0); lineto(x,height); end; end; 2. Запускають команду RUN і отримують запрограмовану вертикальну лінію (рисунок 13). 3. Здійснюють спробу «витерти» лінію з допомогою кнопки < ґумка > (рисунок 14), рухаючи нею по вікні застосунку. Переконуються про неможливість цього прийому, оскільки програмно відображена вертикаль прописана в тілі процедури FormPaint (вона є оброблювачем події OnPaint), яка автоматично відбувається за будь - яких візуальних змін на формі, а значить і під-час переміщення підлеглого формі об’єкту – Button2. 4.З допомогою мишки виконують розтягування вікна прикладної програми з відображеною на ній вертикальною лінією (рисунок15) і переконуються у тому, що вказана пряма продовжує існувати в межах від верху до низу форми оскільки це забезпечено параметром Y=0 процедури moveto(x,0) і параметром Рисунок 13 - на вікні застосунку відображається вертикальна лінія відразу з появою вікна програми. Y= height (Y отримав значення висоти форми) процедури lineto(x,height). 5. Доповнюють програмний код оброблювача події FormPaint, так щоб кількість вертикальних ліній задавалося у тілі програми, як змінна величина. У нижче приведеному коді ця величина позначена ідентифікатоором n, якому для прикладу, відразу надано значення 10. Рисунок 14 - вертикальна лінія не стирається з допомогою «гумки» Рисунок 15 - розтяжка вікна застосунку вліво і вниз. 6. До коду обробника події FormPaint додають оператор циклу, який забезпечуватиме багаторазовий виклик методів moveto(x,0) і lineto(x,height). У тілі підпрограми ця частина підкреслена. procedure TForm2.FormPaint(Sender: TObject); Var i,d,x,n:integer; Begin n:=10; x:=trunc(width/n); d:=х; for i:= 1 to n do begin with canvas do begin moveto(x,0); lineto(x,width); x:=x+d; end; end; end; 7. Здійснюють команду RUN і спостерігають за появою 9 вертикальних прямих ліній на вікні застосунку (рисунок 16). Їх є 9, а не 10. Це є наслідком застосування функції trunc(width/n), яка відкидає дробову частину від результату виконання оператора ділення width/n. Рівномірність відстаней між лініями забезпечна за рахунок постійного кроку d. Йому ж надане значення x:=trunc(width/n) – відступу першої вертикалі від лівого краю форми. 8. Задля перевірки того, як поводитимуть себе графічні об’єкти під час змін розмірів вікна прикладної програми, його розтягають за допомогою мишки і переконуються в тому, що дійсно відбулося викривлення (рисунок 17) вертикальних ліній – повне чи часткове, або ж лінії розміщені не повсюдно по площині вікна. Рисунок 16 - у вікні застосунку автоматично відображаються девять вертикальних ліній. 9. Клацають по копці < витерти все > і переконуються в тому, що оновлення вертикальних ліній у збільшеному вікні застосунку відбулося (рисунок 18). Це сталося тому, що процедура form2.Repaint фактично викликає подію OnPaint, Тим самим відбувається перемальовування самої форми і того, що на ній відображено згідно з програмним кодом записаним у оброблювачі цієї події- процедурі FormPaint. Причому відображення відбувається або згідно зі статично - запрограмованими значеннями властивостей вказаних у інспекторі об’єктів, або ж якщо б ці значення надавалися б динамічно в коді процедури FormPaint. Зауважують, що статично-запрограмовані значення властивостей Button1.Left, Button2.Left, Button2.Top, Button1.Width і т.д. на рисунках 17 і 18 залишаються тими ж.
Рисунок 17 - викривлення вертикальних ліній у вікні застосунку після його розтягування з допомогою мишки. Рисунок 18 - ліквідація викривлень вертикальних ліній у вікні застосунку після клацання на кнопку <витерти все> 10. Доповнюють програмний код обробника події FormPaint фрагментами, що стосуються відображення горизонтальних ліній - вони підкреслені у нижче наведеному програмному тексті. procedure TForm2.FormPaint(Sender: TObject); var i,d,x, y, n:integer; Begin n:=10; x:=trunc(width/n); y:=x; d:=x; for i:= 1 to n do Begin
|