авлений на рис.4.1 а. Графік синусоїди вийшов, хоча і не дуже хороший, тому що розбивається на окремі точки - пікселі. br/>
Рис.4.1 Графік синусоїди, побудований за пікселям (а) і лініями (б) а) б)
Канва - об'єкт класу TCanvas має безліч методів, які дозволяють малювати графіки, лінії, фігури за допомогою властивості Pen - перо. Ця властивість є об'єктом, у свою чергу мають ряд властивостей. Одне з них вже відоме вам властивість Color - колір, яким наноситься малюнок. Друга властивість - Width (ширина лінії). Ширина задається в пікселях. Типово ширина дорівнює 1.
Властивість Style визначає вид лінії. Ця властивість може приймати такі значення:
psSolid Суцільна лінія psDash Штрихова лінія psDot Пунктирна лінія psDashDot Штрих-пунктирна лінія psDashDotDot Лінія, чергуйте штрих і два пунктиру psClear Відсутність лінії psInsideFrame Суцільна лінія, але при Width> 1 допускає кольори, відмінні від палітри Windows
У канви є властивість PenPos типу TPoint (см .) . Ця властивість визначає в координатах канви поточну позицію пера. Переміщення пера без промальовування лінії, тобто зміна PenPos , проводиться методом канви MoveTo (X, Y). Тут ( X, Y) - координати точки, в яку переміщається перо. Ця поточна точка стає вихідною, від якої методом LineTo (X, Y) можна провести лінію в точку з координатами ( X, Y). При цьому поточна точка переміщається в кінцеву точку лінії і новий виклик LineTo буде проводити точку з цієї нової поточної точки.
Давайте спробуємо намалювати пером графік синуса з попереднього прикладу. У даному випадку обробник події форми OnPaint може мати вигляд:
procedure TForm1. FormPaint (Sender: TObject);
var , Y: real;// координати функції , PY: longint;// координати пікселів
begin : = clWhite,. MoveTo (0, ClientHeight div 2);
for PX: = 0 to ClientWidth do
begin
{X - аргумент графіка,
відповідний пікселю з координатою РХ} : = PX * 4 * Pi/ClientWidth;: = Sin (X);
{PY - координата пікселя,
відповідна координаті Y} : = trunc (ClientHeight - (Y +1) * ClientHeight/2);
{Проводиться лінія на графіку} . LineTo (PX, PY);
end ;
end ;
Результат роботи програми в цьому варіанті ви можете бачити на рис.4.1 б. Як бачите, якість графіка істотно покращився. p> Перо може малювати не тільки прямі лінії, але і фігури. Повний список методів канви, що використовують перо, див у вбудованій довідці Delphi. А поки в якості прикладу наведемо тільки один з них - Ellipse , який малює еліпс або коло. Він оголошений як
procedure Ellipse (X1, Y1, Х2, Y2: Integer);
де параметри X1, Х2, Y1, Y2 визначають координати прямокутника, що описує еліпс або коло. Наприклад, оператор
. Ellipse (10, 40, 20, 50);
намалює коло з діаметром 10 і з координатами центру (15, 45).
Фігури в загальному випадку малюються не пустими, а зафарбованими за допомогою властивості канви Brush - кисть. Властивість Brush є об'єктом, що має у свою чергу ряд властивостей. Властивість Color визначає колір заповнення. Властивість Style визначає шаблон заповнення (штрихування). За замовчуванням значення Style одно bsSolid , що означає суцільне зафарбовування кольором Color . p> У пера Pen є ще одна властивість, яке ми поки не розглядали. Це властивість - Mode (режим). За замовчуванням значення Mode = pmCopy . Це означає, що лінії проводяться кольором, заданим у властивості Color . Але можливі й інші режими, в яких враховується не тільки колір Color , але і колір відповідних пікселів фону. Найбільш цікавим з цих режимів є режим pmNotXor - додавання з фоном по інверсному виключає АБО. Якщо заданий цей режим, то повторне малювання тієї ж фігури на тому ж місці канви прибирає раніше намальоване зображення і відновлює кольору пікселів, які були до першого зображення фігури. p> Цю особливість режиму pmNotXor можна використовувати для створення простенької анімації. Досить намалювати щось, потім стерти намальоване, перемалювати трохи зміненим - і малюнок буде представлятися ожи...