- •Передмова
- •1. Графічний інструментарій
- •1.1. Клас tFont
- •1.2. Клас тРеn
- •1.3. Клас tBrush
- •1.4. Клас tCanvas
- •1.5. Класи tGraphic і tPicture
- •2. Приклади використання графічного інструментарію
- •2.1. Приклад 1
- •2.2. Варіанти індивідуальних завдань
- •2.3. Приклад 2
- •2.4. Варіанти індивідуальних завдань
- •Список літератури
- •83055, М. Донецьк, вул. Університетська, 24
- •83055, М. Донецьк, вул. Університетська, 24
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); |
Креслить дугу еліпса в описаному прямокутнику
|
procedure Chord (X1, Yl, X2, Y2, Х3, Y3, Х4, Y4: Integer);
|
|
procedure Pie (X1, Yl, X2, Y2, Х3, Y3, Х4, Y4: Integer); |
|
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); |
|
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 |

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