Главная страница
Случайная страница
КАТЕГОРИИ:
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Клас 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.
|