Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LYeKTsII_GURSKOGO_1.doc
Скачиваний:
10
Добавлен:
16.11.2019
Размер:
3.31 Mб
Скачать

Свойство объектов Canvas

У ряда объектов из библиотеки визуальных компонент есть свойство Canvas (канва), которое предоставляет простой путь для рисования на них. Эти объекты - TBitmap, TComboBox, TDBComboBox, TDBGrid, TDBListBox, TDirectoryListBox, TDrawGrid, TFileListBox, TForm, TImage, TListBox, TOutline, TPaintBox, TPrinter, TStringGrid.

Canvas является в свою очередь объектом, объединяющим в себе поле для рисования, карандаш (Pen), кисть (Brush) и шрифт (Font). Cвойство Canvas предоставляет доступ к графическому образу объекта на экране.

Canvas обладает рядом графических методов: Draw, TextOut, Arc, Rectangle и др. Используя Canvas, Вы можете воспроизводить на форме любые графические объекты - картинки, многоугольники, текст и т.п. без использования компонент TImage,TShape и TLabel (т.е. без использования дополнительных ресурсов). Однако при этом необходимо обрабатывать событие OnPaint того объекта, на канве которого производится рисование. Рассмотрим подробнее свойства и методы объекта Canvas.

Свойства Canvas :

Brush - кисть, является объектом со своим набором свойств:

Bitmap - картинка размером строго 8x8, используется для заполнения (заливки) области на экране.

Color - цвет заливки.

Style - предопределенный стиль заливки; это свойство конкурирует со свойством Bitmap - какое свойство Вы определили последним, то и будет определять вид заливки.

Handle - данное свойство дает возможность использовать кисть в прямых вызовах процедур Windows API .

ClipRect - (только чтение) прямоугольник, на котором происходит графический вывод.

CopyMode - свойство определяет, каким образом будет происходить копирование (метод CopyRect) на данную канву изображения из другого места: один к одному, с инверсией изображения и др.

Font - шрифт, которым выводится текст (метод TextOut).

Handle - данное свойство используется для прямых вызовов Windows API.

Pen - карандаш, определяет вид линий; как и кисть (Brush) является объектом с набором свойств:

Color - цвет линии

Handle - для прямых вызовов Windows API

Mode - режим вывода: простая линия, с инвертированием, с

выполнением исключающего или и др.

Style - стиль вывода: линия, пунктир и др.

Width - ширина линии в точках

PenPos - текущая позиция карандаша, карандаш рекомендуется перемещать с помощью метода MoveTo, а не прямой установкой данного свойства.

Pixels - двухмерный массив элементов изображения (pixel), с его помощью Вы получаете доступ к каждой отдельной точке изображения (см. пример к данному уроку).

Методы Canvas:

Методы для рисования простейшей графики - Arc, Chord, LineTo, Pie, Polygon, PolyLine, Rectangle, RoundRect. При прорисовке линий в этих методах используются карандаш (Pen) канвы, а для заполнения внутренних областей - кисть (Brush).

Методы для вывода картинок на канву - Draw и StretchDraw, В качестве параметров указываются прямоугольник и графический объект для вывода (это может быть TBitmap, TIcon или TMetafile).

StretchDraw отличается тем, что растягивает или сжимает картинку так, чтобы она заполнила весь указанный прямоугольник (см. пример к данному уроку).

Методы для вывода текста - TextOut и TextRect. При выводе текста используется шрифт (Font) канвы. При использовании TextRect текст выводится только внутри указанного прямоугольника. Длину и высоту текста можно узнать с помощью функций TextWidth и TextHeight.

Рассмотрим два примера использования графических компонентов.

Пример 1.

procedure TForm1.Button1Click(Sender: TObject);

Var

X, Y : extended;

PX, PY : LongInt;

HalfHeight : LongInt;

begin

Canvas.Pen.Color := clBlue;

Canvas.Pen.Width := 4;

Canvas.MoveTo( 10, 10);

Canvas.LineTo(300, 400);

Canvas.Brush.Color := clRed;

Canvas.Rectangle(10,10, 200,200);

HalfHeight := Form1.Height div 2;

For PX:=0 to Form1.Width do

begin

X := PX*(2*Pi/Form1.Width);

Y := Sin(X);

PY := Trunc(0.7*Y*HalfHeight) + HalfHeight;

Canvas.Pixels[PX, PY] := RGB(250, 0, 0);

end;

end;

Пример 2.

procedure TForm1.Button1Click(Sender: TObject);

Var

X, Y : extended;

PX, PY : LongInt;

i : LongInt;

HalfHeight : LongInt;

begin

Canvas.Pen.Color := clBlue;

Canvas.Pen.Width := 4;

Canvas.MoveTo(10, 10);

//Canvas.LineTo (300, 400);

Canvas.Brush.Color := clRed;

Canvas.Rectangle(10, 10, 200,200);

HalfHeight := Form1.Height div 2;

For i:= -10 to 10 do

begin

PX := 0;

while PX<Form1.Width do

begin

X := PX*(2*PI/Form1.Width);

Y := SIN(X);

PY := Trunc(0.7*Y*HalfHeight)+ HalfHeight+(i*10);

IF(PX=0) then Canvas.MoveTo(PX,PY);

Canvas.LineTo(PX, PY);

PY:=Trunc(0.6*Y*HalfHeight)+ HalfHeight+((i - 1)*10);

Canvas.LineTo(PX, PY);

PX := PX + 15;

end;

Form1.Canvas.Ellipse(200, 200, 400, 400);

Form1.Canvas.Pie (450, 300, 500, 400,

100, 100, 100, 200);

Form1.Canvas.Rectangle(400, 200, 450, 400);

end;

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]