Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции 2 семестр.doc
Скачиваний:
42
Добавлен:
27.05.2015
Размер:
777.73 Кб
Скачать

7. Создание графических изображений

7.1. Классы для работы с графикой

Класс TFont определяет характеристики шрифта в любом компоненте, который может содержать текст. Свойства данного типа:

Charset: TFontCharset NoDefault; определяет набор символов шрифта.

Значения, которые могут быть использованы в качестве TFontCharset: type TFontCharset = (fcsLatin1, fcsAnyCharSet, fcsLatin2, fcsLatin3, fcsLatin4, fcsISO_8859_5, fcsISO_8859_6, fcsKOI8R, fcsSet_Ja, fcsSet_Ko, fcsSet_Th_TH, fcsSet_Zh, fcsUnicode);

Color: TColor; определяет цвет символов.

Height: Integer; устанавливает высоту шрифта в пикселях.

Name: TFontName; задает имя шрифта.

Рitch: TFontPitch; задает ширину шрифта и может принимать значения: fpDefault – ширина задается типом шрифта, fpVariable – ширина символов переменная, fpFixed – ширина символов фиксированная.

Size: Integer; задает высоту шрифта в пунктах (1 пункт = 1/72 дюйма).

Style: TFontStyles; задает тип шрифта: fsBold – полужирный, fsItalic – курсив, fsUnderline – подчеркнутый, fsStrikeOut – перечеркнутый.

Класс ТРеn задает характеристики карандаша, которым создаются изображения различных линий либо контуров. Основные свойства:

Color: TColor; определяет цвет линии, рисуемой карандашом. По умолчанию – черный.

Mode: TPenMode; определяет стиль рисования линий карандашом. Может принимать следующие значения: pmBlack – всегда изображается черная линия;

pmWhite – всегда изображается белая линия;

pmNop – бесцветная линия;

pmNot – цвет, инверсный цвету экрана;

pmCopy – цвет определяется значением свойства Color;

pmNotCopy – цвет, инверсный цвету, заданному в свойстве Color;

pmMergePenNot – комбинация цвета Color и инверсного цвета экрана;

pmMaskPenNot – комбинация цветов, общих у Color и инверсного цвета экрана;

pmMergeNotPen – комбинация цвета экрана и инверсного цвета Color;

pmMaskNotPen – комбинация цветов, общих у цвета экрана и инверсного цвета Color;

pmMerge – комбинация цветов экрана и Color;

pmNotMerge – цвет, инверсный комбинации цветов экрана и Color;

pmMask – комбинация цветов, общих у экрана и Color;

pmNotMask – цвет инверсный комбинации цветов, общих у экрана и Color;

pmXor – комбинация цветов, присутствующих у цвета экрана или Color, но не одновременно у обоих;

pmNotXor – цвет, инверсный комбинации цветов, присутствующих у цвета экрана или

Color, но не одновременно у обоих.

По умолчанию цвет линии определяется свойством Color.

Style: TPenStyle; определяет стиль линии, рисуемой карандашом: psSolid – сплошная линия (значение по умолчанию),

psDash – штриховая линия,

psDot – пунктирная линия,

psDashDot – штрихпунктирная линия,

psDashDotDot – штрихпунктирная линия с двумя пунктирами,

psClear – невидимая линия,

psInsideFrame – линия внутри замкнутой рамки

Width: Integer; определяет толщину рисуемой линии. По умолчанию толщина равна 1 пикселю.

Класс TBrush содержит определение характеристик кисти, которая используется для заливки (закраски) замкнутых областей. Основные свойства:

Bitmap: TBitmap; указывает на объект типа TBitmap, содержащий побитовое отображение изображения, размером 8х8 пикселей. Если Bitmap не пустой, то шаблон заполнения определяется именно им, а не свойством Style. Иначе свойство должно иметь значение nil.

Color: TColor; определяет цвет кисти. По умолчанию – белый цвет.

Style: TBrushStyle; определяет орнамент кисти. Могут быть значения: bsSolid – сплошная раскраска,

bsClear – отсутствие раскраски,

bsHorizontal – горизонтальные линии,

bsVertical – вертикальные линии,

bsFDiagonal – левые диагональные линии,

bsBDiagonal – правые диагональные линии,

bsCross – клетка,

bsDiagCross – косая клетка.

Класс TCanvas определяет объект Canvas, который представляет собой поверхность компонента, используемую для рисования, и инструменты, с помощью которых создаётся изображение: шрифт (класс TFont), карандаш (класс TPen) и кисть (класс TBrush). Объекты типа TCanvas не являются компонентами и используются как свойства различных элементов управления. Основные свойства TCanvas:

Brush: TBrush; задает кисть канвы.

Font: TFont; задает шрифт канвы.

Pen: ТРеn; задает карандаш канвы.

PenPos: TPoint; определяет положение графического курсора.

Все геометрические фигуры можно условно разбить на контурные (не имеющие внутренней закраски) и закрашенные (имеющие внутреннюю закраску). При рисовании контурных фигур используется только карандаш Реn с установленными в нем характеристиками (цвет линии, толщина и т.д.). Для закрашенных фигур (например эллипс, многоугольник) внутренность закрашивается кистью Brush с установленными в ней характеристиками (цвет, орнамент и т.д.). Тексты изображаются в соответствии с характеристиками (начертания, размер и т.д.), заданными в шрифте Font. На этапе выполнения программы значения свойств Pen, Brush и Font можно изменять.

Канва состоит из отдельных точек – пикселей. Каждый пиксель имеет горизонтальную и вертикальную координату. Начало координат, т.е. точка с координатами (0,0), располагается в левом верхнем углу канвы. Горизонтальная ось направлена слева направо, а вертикальная – сверху вниз. Размер канвы зависит от размера и особенностей компонента. Так, например, для компонента Image размер канвы определяется свойствами Height и Width, а для формы – свойствами ClientHeight и ClientWidth.

На канве есть невидимый графический курсор, который определяет текущее положение карандаша. Как правило, рисование графических примитивов – линий, окружностей, прямоугольников и т.д. – начинается с текущего положения этого курсора. В процессе рисования положение курсора изменяется или устанавливается в заданное положение.

Основные методы создания простых графических изображений в классе TCanvas:

procedure MoveТo(Х, Y: Integer); перемещает графический курсор в точку с координатами (Х, Y).

procedure LineTo(X, Y: Integer); проводит линию карандашом Реn из текущего положения графического курсора, определяемого свойством PenPos, до точки с координатами (Х,Y). Свойство PenPos получает новое значение, определяемое координатами (Х, Y).

Пример построения диагональных прямых линии формы при ее обновлении.

procedure TForm1.FormPaint(Sender: TObject);

begin

with Canvas do

begin

Pen.Color:=clRed;

MoveTo(0,0);

LineTo(ClientWidth, ClientHeight);

MoveTo(0, ClientHeight);

LineTo(ClientWidth, 0);

end;

end;

procedure Arc(X1, Y1, Х2, X2, Х3, Y3, Х4, Y4: Integer); рисует дугу эллипса, который вписан в прямоугольник с координатами левого верхнего угла (Х1,Y1) и правого нижнего угла (Х2,Y2). Дуга начинается в точке пересечения эллипса с прямой, проходящей через центр эллипса и точку с координатами (Х3,Y3), а заканчивается в точке пересечения эллипса с прямой, проходящей через центр эллипса и точку с координатами (Х4, Y4).

Пример построения дуги на форме при ее обновлении

procedure TForm1.FormPaint(Sender: TObject);

var R: TRect;

begin

R := GetClientRect; {Выдает размеры текущего контейнера}

Canvas.Arc(R.Left, R.Top, R.Right, R.Bottom, R.Right, R.Top, R.Left, R.Top);

end;

procedure Chord (X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer); чертит замкнутую фигуру, границами которой являются дуга окружности или эллипса и хорда. Параметры данного метода аналогичны параметрам метода Arc • procedure Ellipse(X1, Y1, Х2, Y2: Integer); overload; рисует эллипс, вписанный в прямоугольник с координатами левого верхнего угла (X1, Y1) и правого нижнего угла (Х2, Y2).

procedure Pie(X1, Y1, Х2, Y2, Х3, Y3, Х4, X4: Longint); рисует сектор эллипса. Дуга эллипса задается так же, как методе Arc.

procedure Rectangle(X1, Y1, Х2, Y2: Integer); overload; рисует прямоугольник, у которого левый верхний угол имеет координаты (Х1, Y1), а правый нижний угол – координаты (Х2, Y2).

Пример построения прямоугольника на форме при ее обновлении.

procedure TForm1.FormPaint(Sender: TObject);

var X,Y: integer;

begin

X:=Form1.Height; Y:=Form1.Width;

Canvas.Rectangle(Random(X), Random(Y), Random(X), Random(Y));

end;

procedure RoundRect(X1, Y1, Х2, Y2, Х3, Y3: Integer); рисует прямоугольник, у которого левый верхний угол имеет координаты (X1, Y1), а правый нижний угол – координаты (Х2, Y2). Углы прямоугольника закруглены частями эллипса с осями X3 и Y3.

Пример построения прямоугольника со скругленными углами, которые скруглены по

шаблону окружности, с диаметром 10 точек.

procedure TForm1.FormPaint (Sender: TObject);

begin

Canvas.RoundRect(0, 0, ClientWidth div 2, ClientHeight div 2, 10, 10);

end;

procedure PolyBeziеr (const Points: array of TPoint); чертит на канве цветом пера Реn сглаженную кривую по заданному множеству точек, определенных в массиве Points.

Пример построения кривой на форме при ее обновлении

procedure TForm1.FormPaint(Sender: TObject);

begin

Canvas.PolyBezier([Point(0, 0), Point (100, 10), Point (20, 30), Point(230, 100)]);

end;

procedure Polygon (Points: array of TPoint); чертит на канве многоугольник по заданному множеству точек, определенных в массиве Points, причем первая точка массива соединяется с последней, после чего многоугольник закрашивается цветом, определенным свойством кисти Brush.

Пример построения многоугольника на форме при ее обновлении.

procedure TForm1.FormPaint(Sender: TObject);

begin

Canvas.Brush.Color := clTeal;

Canvas.Polygon([Point(10, 10), Point(30, 10), Point(130, 30), Point(240, 120)]);

end;

procedure Polyline (Points: array of TPoint); чертит на канве незамкнутый многоугольник. Аналогичен методу Polygon, только не соединяет первую и последнюю точки массива Points

procedure FillRect (const Rect: TRect); заполняет указанную прямоугольную область канвы цветом, определенным текущим значением свойства Color кисти (Brush) Пример построения закрашенной области на форме при ее обновлении.

procedure TForm1.FormPaint(Sender: TObject);

begin

Canvas.Brush.Color:=clRed;

Canvas.FillRect(Rect(0,0,100,100));

end;

procedure TextOut(X, Y: Integer; const Text: string); выводит текст Text на поверхность канвы. X и Y являются координатами левого верхнего угла.

Пример вывода текста на форму при ее обновлении:

procedure TForm1.FormPaint(Sender: TObject);

begin

Canvas.Font.Color := clRed;

Canvas.TextOut(20, 20, 'Owner Drawn text');

end;

function TextHeight(const Text: string): Integer; возвращает высоту текста Text в пикселях, определяемую шрифтом Font.

function TextWidth(const Text: string): Integer; возвращает длину текста Text в пикселях, определяемую шрифтом Font В классе TCanvas определены события OnChange и OnChanging property OnChange: TNotifyEvent; возникает перед изменениями в канве.

property OnChanging: TNotifyEvent; возникает после изменений в канве.