Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Графический инстументарий Delphi.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
235.64 Кб
Скачать

1.4. Клас tCanvas

Цей клас створює «канву», на якій можна малювати пером, пензлем і шрифтом. Об'єкти класу TCanvas автоматично створюються для всіх видимих компонентів, що повинні вміти намалювати себе. Вони інкапсулюють об'єкти Font, Pen, Brush, а також методи, що використовують ці об'єкти.

Таблиця 1.5. Властивості класу TCanvas

Font: TFont;

Об'єкт-шрифт

Pen: TPen;

Об'єкт-перо

Brush: TBrush;

Об'єкт-пензель

PenPos: TPoint;

Визначає поточне положення пера в пікселях щодо лівого верхнього кута канви

Pixels [X, Y: Integer]: TColor;

Масив пікселів канви

CopyMode: TCopyMode;

Установлює спосіб взаємодії растрового зображення з кольором фону

ClipRect: TRect;

Визначає поточні розміри області, яка потребує промальовування

Handle: Integer;

Дескриптор канви. Використовується при безпосередньому звертанні до API-функцій Windows

LockCount: Integer;

Лічильник блокувань канви. Збільшується на одиницю при кожному звертанні до методу Lock і зменшується на одиницю при звертанні до UnLock

Властивість СopyMode використовується при копіюванні частини однієї канви (джерела) в іншу (приймач) методом CopyRect і може мати одне з наведених у табл. 1.6 значень.

Таблиця 1.6. Значення властивості СopyMode

cmSrcCopy

Копіює зображення джерела на канву

cmBlackness

Заповнює область малювання чорним кольором

cmWhitness

Заповнює область малювання білим кольором

cmDestInvert

Заповнює область малювання інверсним кольором фону

cmNotSrcCopy

Копіює на канву інверсне зображення джерела

cmSrcAnd

Поєднує зображення джерела і канви за допомогою операції AND

cmSrcErase

Інвертує зображення на канві та поєднує результат із зображенням джерела операцією AND

cmNotSrcErase

Поєднує зображення на канві та зображення, що копіюється, операцією OR й інвертує отримане

cmSrcInvert

Поєднує зображення на канві та джерело операцією ХОR

cmSrcPaint

Поєднує зображення на канві та джерело операцією ОR

cmMergeCopy

Поєднує зображення на канві та зображення, що копіюється, операцією AND

cmMergePaint

Поєднує зображення на канві та зображення, що копіюється, операцією OR

cmPatCopy

Копіює зразок джерела

cmPatInvert

Комбінує зразок джерела з зображенням на канві за допомогою операції ХОR

cmPatPaint

Комбінує зображення джерела з його зразком за допомогою операції OR, потім отримане поєднується з зображенням на канві також за допомогою OR

За допомогою властивості Pixels усі пікселі канви подаються у вигляді двовимірного масиву точок. Змінюючи колір пікселів, можна промальовувати зображення окремими точками.

Таблиця 1.7. Методи класу TCanvas

procedure MoveTo (X, Y: Integer);

Переміщує перо в положення (X, Y) без креслення ліній

procedure LineTo

(X, Y: Integer);

Креслить лінію від поточного положення пера до точки

(X, Y)

procedure Arc (XI, Yl, X2, Y2, Х3, Y3, Х4, Y4: Integer);

Креслить дугу еліпса в описаному прямокутнику

(XI, Y1) – (X2, Y2). Початок дуги лежить на перетині еліпса і проміня, проведеного з його центра через точку (Х3, Y3), а кінець – на перетині з променем, проведеним з центра через точку (Х4, Y4). Дуга креслиться проти годинникової стрілки

procedure Chord (X1, Yl, X2, Y2, Х3, Y3, Х4, Y4: Integer);

Креслить сегмент еліпса в описаному прямокутнику (XI, Y1) - (X2, Y2). Початок дуги сегмента лежить на перетині еліпса та променя, проведеного з його центра через точку (Х3, Y3), а кінець – на перетині з променем, проведеним з центра через точку (Х4, Y4). Дуга сегмента креслиться проти годинникової стрілки, а початкова і кінцева точки дуги з'єднуються прямою

procedure Pie (X1, Yl, X2, Y2, Х3, Y3, Х4, Y4: Integer);

Креслить сектор еліпса в описаному прямокутнику (X1, Y1) - (X2, Y2). Початок дуги лежить на перетині еліпса та променя, проведеного з його центра через точку (Х3, Y3), а кінець – на перетині з променем, проведеним з центра через точку (Х4, Y4). Дуга креслиться проти годинникової стрілки. Початок і кінець дуги з'єднуються прямими з її центром

procedure Ellipse(X1, Y1, X2, Y2: Integer);

Креслить еліпс в описаному прямокутнику (X1, Y1) - (X2, Y2). Заповнює внутрішній простір еліпса поточним пензлем

procedure FrameRect (const Rect: TRect);

Окреслює границі прямокутника Rect поточним пензлем товщиною в 1 піксель без заповнення внутрішньої частини

Продовження табл. 1.7

procedure Rectangle (X1, Y1, X2, Y2: Integer);

Креслить і заповнює прямокутник (X1, Y1) - (X2, Y2). Для креслення без заповнення використовуйте FrameRect або Polyline

procedure FillRect (const Rect: TRect);

Заповнює поточним пензлем прямокутну область Rect, включаючи її ліву і верхню межі, але не торкаючись правої та нижньої меж

procedure RoundRect (X1, Yl, X2, Y2, X3, Y3: Integer);

Креслить і заповнює прямокутник (X1, Y1) - (X2, Y2) з округленими кутами. Прямокутник (X1, Y1) - (X3, Y3) визначає дугу еліпса для закруглення кутів

procedure Polygon (Points: Array of

TPoint);

Креслить пером багатокутник за допомогою точок, заданих у масиві Points. Кінцева точка з'єднується з початковою, і багатокутник заповнюється поточним пензлем. Для креслення без заповнення використовується Polyline

procedure Polyline (Points: Array of

TPoint);

Креслить пером ламану пряму за допомогою точок, заданих у масиві Points

procedure FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle);

Заливає канву поточним пензлем, починаючи з точки (X, Y) і поширюється в усі сторони від неї. Якщо FillStyle=fsSurface, заливання поширюється на всі сусідні точки з кольором Color. Якщо FillStyle=fsBorder, навпаки, заливання припиняється на точках з цим кольором

procedure Draw(X, Y: Integer; Graphic: TGraphic);

Промальовує графічний об'єкт Graphic так, щоб лівий верхній його кут розташувався в точці (X, Y)

procedure DrawFocusRect (const Rect: TRect);

Промальовує прямокутник за допомогою операції XOR, тому повторне малювання знищує раніше накреслений прямокутник. Використовується, здебільшого, для промальовування нестандартних інтерфейсних елементів при одержанні ними фокуса введення і при втраті його

procedure StretchDraw (const Rect: TRect; Graphic: TGraphic );

Креслить і за необхідності масштабує графічний об'єкт Graphic так, щоб він цілком збігся з прямокутником Rect

procedure CopyRect (Dest: TRect; Canvas: TCanvas; Source: TRect);

Копіює зображення Source канви Canvas у ділянку Dest поточної канви. При цьому різноманітні спеціальні ефекти досягаються за допомогою властивості CopyMode

procedure Refresh;

Установлює в канві шрифт, перо і пензель за замовчуванням

Закінчення табл. 1.7

function TextExtent (const Text: String): TSize;

Повертає ширину і висоту прямокутника, що охоплює текстовий рядок Text

function TextHeight (const Text: String): Integer;

Повертає висоту прямокутника, що охоплює текстовий рядок Text

function TextWidth (const Text: String): Integer;

Повертає ширину прямокутника, що охоплює текстовий рядок Text

procedure TextOut(X, Y: Integer; const Text: String) ;

Виводить текстовий рядок Text так, щоб лівий верхній кут прямокутника, що охоплює текст, розташовувався в точці (X, Y)

procedure TextRect (Rect: TRect; X, Y: Integer; const Text: String) ;

Виводить текстовий рядок Text так, щоб лівий верхній кут прямокутника, що охоплює текст, розташовувався в точці (X, Y). Якщо при цьому яка-небудь частина напису виходить за межі прямокутника Rect, вона відтинається і стає непомітною

procedure Lock;

Блокує канву в багатопотокових додатках для запобігання використання канви в інших потоках команд

function TryLock: Boolean;

Намагається заблокувати канву. Якщо канва не була заблокована іншим потоком команд, повертає True, у протилежному випадку нічого не робить і повертає False

procedure Unlock;

Зменшує на одиницю значення лічильника блокування канви

procedure BrushCopy (const Dest: TRect; Bitmap: TBitmap; const Source: TRect; Color: TColor);

Копіює частину зображення Source на ділянку канви Dest. Color указує колір у Dest, що повинний замінятися на колір пензля канви. Метод уведений для сумісності з ранніми версіями Delphi. Замість нього варто користуватися класом TImageList