VI.Клас tBrush
Об'єкти класу TBrush (пензля) служать для заповнення внутрішнього простору замкнутих фігур.
Властивості класу:
property Bitmap:TBitmap; Містить растове зображення, що буде використовуватися пензлем для заповнення. Якщо ця властивість визначена, властивості Color і Style ігноруються.
property Color: TColor; Колір пензля
property Handle: Integer; Дескриптор пензля. Використовується при безпосередньому звертанні до API-функцій Windows.
property Style: TBrushStyle; Стиль пензля
Стилі пензля
VII.Клас tCanvas.
Цей клас створює «канву», на якій можна малювати креслярськими інструментами - ручкою, пензлем і шрифтом. Об'єкти класу TCаnvas автоматично створюються для усіх видимих компонентів, що повинні вміти намалювати себе. Вони інкапсулюють об'єкти Font, Pen, Brush, а також численні методи, що використовують ці об'єкти.
Розглянемо декілька методів даного класу.
Procedure Ellipse(X1,Y1,Х2,Y2:Integer); Креслить еліпс у прямокутнику, що охоплює, (X1,Y1)-(X2,Y2). Заповнює внутрішній простір еліпса поточним пензлем.
Procedure FloodFill(X,Y:Integer; Color:TColor; FillStyle:TFillStyle); Робить заливку канви поточним пензлем. Заливка починається з точки (X,Y) і поширюється в - усі сторони від її. Якщо FillStyle=fsSurfасе, заливка поширюється на всі сусідні точки з кольором Color. Якщо FillStyle=fsBorder, навпаки, заливка припиняється на точках із цим кольором.
Procedure LineTo(X,Y:Integer); Креслить лінію від поточного положення пензля до точки (X,Y).
Procedure MoveTo (X,Y: Integer); Переміщає пензель в положення (X,Y) без креслення ліній.
Procedure Rectangle(X1,Y1,X2,Y2:Integer); Вичерчує і заповнює прямокутник (X1,Y1)- (X2,Y2). Для креслення без заповнення використовуйте FrameRect або Polyline.
VIII.Області.
На жаль, у клас TCanvas не включена ще одна образотворча можливість Windows - області (Regions). Області - такі ж графічні об'єкти, як ручку, пензель, шрифт. Вони утворяться за допомогою комбінації найпростіших геометричних фігур - прямокутників, багатокутників, еліпсів. Чудовою особливістю областей є можливість створення з їхньою поміччю не прямокутних кнопок, колірних областей, вікон.
Основні функції для роботи з областями.
Function CombineRgn(DestRgn, Rgn1, Rgn2: Cardinal; CombineMode: Ineger): Integer; Об'єднує дві області в одну: DestRgn - дескриптор результуючої області; Rgn1, Rgn2 - дескриптори що об'єднуються областей; CombineMode - параметр, що вказує засіб об'єднання.
Function CreateEllipticRgn(x1, y1, x2, y2: Integer): Cardinal; Створює еліптичну область.
Function CreatePolygonRgn(var Points; Count, PolyFillMode: Integer): Cardinal; Створює область у виді багатокутника: Points - масив координат усіх вершин багатокутника; Count - кількість вершин; PolyFillMode - режим заповнення багатокутника.
Function CreateRectRgn(x1,y1,x2,y2:Integer):Cardinal; Створює прямокутну область.
Function CreateRoundRectRgn (x1,y1,x2,y2,x3,y3 :integer):Cardinal; Створює область з округленими кутами.
Function EqualRgn(Rgn1, Rgn2: Cardinal): Bool; Перевіряє еквівалентність двох областей.
Function FillRgn(DC, Rgn, Brush: Cardinal): Bool; Зафарбовує область пензлем: DC-дескриптор канви вікна; Rgn-дескриптор області; Brush-дескриптор пензля.
Function FrameRgn(DC, Rgn, Brush: Cardinal; Width, Height: integer):Bool; Обводить (але не заповнює) область пензлем висотою Height і шириною Width пікселів.
Function InvertRgn (DC, Rgn: Cardinal):Bool; Інвертує всі пікселі усередині області.
Function OffsetRgn(DC, Rgn: Cardinal; dx, dy: Integer): Integer; Зміщає область dx по горизонталі і на dy по вертикалі.
Function PaintRgn(DC, Rgn: Cardinal): Bool; Зафарбовує область поточним пензлем.
Function PtInRegion (Rgn: Cardinal; x, y: Integer): Bool; Перевіряє приналежність точки (X,Y) області Rgn.
Function RectInRRegion(Rgn: Cardinal; Rect: Trect): Bool; Перевіряє приналежність прямокутника Rect області Rgn.
Function SetWindowRgn (DC, Rgn: Carrdinal; Redraw: Bool):Integer; Показує приналежному вікну з канвою DC область Rgn замість вікна; Redraw - дозволяє/забороняє перемалювання області. Усі частини вікна, що не ввійшли в область, не показуються.
Приклад нестандартного вікна.
Var
Rgn:Cardinal;
Begin
Rgn:=Form1. Canvas. CreateEllipticRgn(0,0,50,50);
Form1. Canvas. SetWindowRgn(Handle, Rgn, True);
End;