Главная страница
Случайная страница
КАТЕГОРИИ:
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Клас 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) без креслення ліній
| procedureLineTo
(X, Y: Integer);
| Креслить лінію від поточного положення пера до точки
(X, Y)
| procedureArc (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). Дуга сегмента креслиться проти годинникової стрілки, а початкова і кінцева точки дуги з'єднуються прямою
| procedurePie (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)
| procedureDrawFocusRect (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;
| Блокує канву в багатопотокових додатках для запобігання використання канви в інших потоках команд
| functionTryLock: Boolean;
| Намагається заблокувати канву. Якщо канва не була заблокована іншим потоком команд, повертає True, у протилежному випадку нічого не робить і повертає False
| procedure Unlock;
| Зменшує на одиницю значення лічильника блокування канви
| procedure BrushCopy (const Dest: TRect; Bitmap: TBitmap; const Source: TRect; Color: TColor);
| Копіює частину зображення Source на ділянку канви Dest. Color указує колір у Dest, що повинний замінятися на колір пензля канви. Метод уведений для сумісності з ранніми версіями Delphi. Замість нього варто користуватися класом TImageList
| 1.5. Класи TGraphic і TPicture
TGraphic – це абстрактний клас, що інкапсулює загальні властивості й методи своїх нащадків, таких як піктограми (TIcon), метафайл (TMetafile), растрове зображення (TBitmap), а також TClipboard, TYPEGImage, TOLEGraphic, TPicture і т.ін. Зазвичай нащадки зберігаються у файлах визначеного формату. Піктограми – це невеликі растрові зображення з регульованою їхньою прозорістю (.ICO). Метафайл – це зображення, побудоване на графічному пристрої за допомогою спеціальних команд (. WMF або. EMF). Растрові зображення – це довільні графічні зображення (. BMP).
Таблиця 1.8. Властивості класу TGraphic
Empty: Boolean;
| Містить True, якщо з об'єктом не пов'язане графічне зображення
| Height: Integer;
| Містить висоту зображення в пік селях
| Modified: Boolean;
| Містить True, якщо графічний об'єкт змінювався
| Palette: HPALETTE;
| Містить палітру кольорів графічного об'єкту
| PaletteModified: Boolean;
| Містить True, якщо змінювалася палітра кольорів графічного об'єкту
| Transparent: Boolean;
| Містить True, якщо об'єкт прозорий для фону, на якому він зображений
| Width: Integer;
| Містить ширину зображення в пікселях
|
Таблиця 1.9. Методи класу TGraphic
procedureLoadFromClipboardFormat (AFormat: Word; AData: THandle; APalette: HPALETTE);
| Шукає в буфері міжпрограмного обміну Clipboard зареєстрований формат AFormat і, якщо формат знайдений, завантажує з буфера зображення AData і його палітру APalette
| procedure LoadFromFile (const FileName: String);
| Завантажує зображення з файлу FileName
| procedureSaveToClipboardFormat (Var AFormat: Word; var AData: THandle; var APalette: HPALETTE);
| Розташовує графічне зображення AData і його палітру кольорів APalette у буфері міжпрограмного обміну у форматі AFormat
| procedure LoadFromStream (Stream: TStream);
| Завантажує зображення з потоку даних Stream
| procedure SaveToFile (const FileName: String);
| Зберігає зображення у файлі FileName
| procedure SaveToStream (Stream: TStream);
| Зберігає зображення в потоці Stream
|
Клас TPicture інкапсулює у собі все необхідне для роботи з готовими графічними зображеннями – піктограмою, метафайлом, растром або картинкою користувача. Його властивість Graphic може містити об'єкт кожного з цих типів, забезпечуючи потрібний поліморфізм методів класу.
Таблиця 1.10. Властивості класу TPicture
Bitmap: TBitmap;
| Інтерпретує графічний об'єкт як растрове зображення
| Graphic: TGraphic;
| Містить графічний об'єкт
| Height: Integer;
| Містить висоту зображення в пікселях
| Icon: ТIcon;
| Інтерпретує графічний об'єкт як піктограму
| Metafile: TMetafile;
| Інтерпретує графічний об'єкт як метафайл
| Width: Integer;
| Містить ширину зображення в пікселях
|
Таблиця 1.11. Методи класу TPicture
procedure Assign(Source: TPersistent);
| Зв'язує власний графічний об'єкт Graphic з об'єктом Source
| procedure LoadFromClipboardFormat (Format: Word; AData: THandle; APalette: HPALETTE);
| Шукає в буфері міжпрограмного обміну Clipboard зареєстрований формат AFormat і, якщо формат знайдений, завантажує з буфера зображення AData і його палітру APalette
| procedure LoadFromFile(const FileName: String);
| Завантажує зображення з файлу FileName
| class procedure RegisterClipboardFormat (AFormat: Word; AGraphicClass: TGraphicClass);
| Використовується для реєстрації в Clipboard нового формату зображення
| class procedure RegisterFileFormat (const AExtension, ADescription: String; AGraphicClass: TGraphicClass);
| Використовується для реєстрації нового файлового формату
| class procedure RegisterFileFormatRes(const AExtension: String; ADescriptionResID: Integer; AGraphicClass: TGraphicClass);
| Використовується для реєстрації нового формату ресурсного файлу
| procedureSaveToClipboardFormat (var AFormat: Word; var AData: THandle; var APalette: HPALETTE);
| Розташовує графічне зображення AData і його палітру кольорів APalette у буфері міжпрограмного обміну у форматі AFormat
| procedure SaveToFile(const FileName: String);
| Зберігає зображення у файлі FileName
| class function SupportsClipboardFormat (AFormat: Word): Boolean;
| Повертає True, якщо формат AFormat зареєстрований у буфері міжпрограмного обміну Clipbord
| class procedure UnregisterGraphicClass (AClass: TGraphicClass);
| Робить недоступними будь-які графічні об'єкти класу Aclass
| 2. ПРИКЛАДИ ВИКОРИСТАННЯ ГРАФІЧНОГО ІНСТРУМЕНТАРІЮ
Розглянемо фрагменти програм, що ілюструють використання інструментів (шрифту, пера і пензля) графічного пристрою DC (Device Context) і основних методів класу TCanvas.
|