Тема: Стандартные графические процедуры.
Цель: Ознакомиться со стандартными графическими процедурами.
1. класс TCanvas.
В Windows для обозначения канвы, на которой выполняется рисунок, используется термин контекст устройства (DC). Взаимодействие с контекстами устройств на уровне вызова функций АРЕ может оказаться достаточно сложным.Поэтому сначала нужно держать в системе Windows дескриптор контекста устройства (ссылка на формальное описание возможностей устройства), после чего выбрать в него нужные нам объекты (перья, кисти, шрифты и т.п.). Только после этого можно на нем что-то рисовать. По завершении рисования, перед тем, как удалить контекст устройства, нужно высвободить выбраны в него объекты. В противном случае память, используемая в приложении, никогда не будет возвращена операционной системе.
Существующий класс TCanvas из библиотеки визуальных компонентов значительно облегчает работу с контекстами устройств. В качестве свойств (property) входит в многих компонентов.
Класс TCanvas имеет много свойств и методов.
1.1 .Основные свойства класса TCanvas:
свойство | описание |
Brush | Задает цвет заливки и шаблон при окраски фигур |
ClipRect | Представляет собой текущий прямоугольный регион отсечения канвы. Все операции графического вывода ограничиваются заданным прямоугольником. Свойство только для чтения |
CopyMode | Определяет, каким образом будет происходить копирования (метод CopyRect) на эту канву изображения со второго места: один к одному, с инверсией изображения и т.п. |
Font | Содержит шрифт, класс TCanvas использует при выводе текста (метод TextOut) |
Handle | Дескриптор (HDC) канвы. Данное свойство дает возможность напрямую вызывать функции API Windows |
Pen | Определяет стиль и цвет линий |
PenPos | Задает координаты х и у для очередной операции рисования |
Pixels | Представляет собой двумерный массив пикселей объекта Canvas |
1.2 .Основные методы класса TCanvas:
свойство | описание |
Arc | Рисует на канве текущим пером сегмент эллипса |
BrushCopy | Рисует битную матрицу с прозрачным фоном |
CopyRect | Копирует на канву часть изображения |
Draw | Копирует изображение из памяти на канву |
Ellipse | Рисует текущим пером эллипс и закрашивает его текущей кистью |
FloodFill | Выполняет заливку области канвы текущей кистью |
свойство | описание |
LineTo | Проводит текущим пером линию с данной точки в точку с координатами х и у |
MoveTo | Устанавливает текущее положение пера |
Pie | Рисует на канве сектор эллипса |
Polygon | С помощью массива объектов типа TPoint строит многоугольник и закрашивает его текущей кистью |
Polyline | С помощью массива объектов типа TPoint строит текущим пером ломаную линию. Автоматического замыкания контура при этом не происходит |
Rectangle | Рисует на канве текущим пером прямоугольник и закрашивает его текущей кистью |
RoundRect | Рисует закрашенный прямоугольник с закругленными углами |
StretchDraw | Копирует битовую матрицу из памяти на канву. При этом в соответствии с целевой прямоугольной областью происходит масштабирование (растяжения или сжатия) растровых изображений |
TextExtend | Возвращает высоту и ширину строки Text в пикселях. При расчетах учитывается текущий шрифт канвы |
TextHight | Возвращает высоту строки Text в пикселях. При расчетах учитывается текущий шрифт канвы |
TextOut | Выводит строку Text с помощью текущего шрифта в заданном месте канвы |
TextRect | Выводит текст с отсечением. При этом часть текста, которая попала за пределы прямоугольного региона отсечения, становится невидимой |
Перечисленные свойства и методы представляют собой лишь незначительную часть возможностей контекстов устройств Windows. Но даже эта часть может удовлетворить 80% потребностей, которые возникают при работе с графикой. Однако, перед тем, как перейти к рассмотрению класса TCanvas, остановимся на графических объектах, которые применяются в программирования для Windows.
В интерфейсе графических устройств (GDI) Windows имеется большое количество типов объектов, которые имеют определенное влияние на работу контекстов графических устройств. Наиболее часто применяемыми являются объекты — пера, кисти, шрифты. Менее популярны объекты — палитры, битовые матрицы, регионы отсечения.
1.3 .класс TPen.
Рассмотрим возможности вложенного объекта перо (pen).
С помощью пера можно рисовать разные линии — как отдельные, которые соединяют одну точку с другой, так и линии, ограничивающие различные геометрические фигуры — прямоугольник, эллипс, многоугольник.
Для доступа к перу используют свойство Pen класса TCanvas, которая представляет собой объект типа TPen.
Свойства класса TPen:
свойство | описание |
Color | Задает цвет линии |
свойство | описание |
Handle | Представляет собой дескриптор пера (HPEN). Используется в случае прямых вызовов соответствующей функцией API |
Mode | Определяет способ рисования линии: нормальный, инверсный, с исключительным или (xor) тому подобное |
Style | Определяет стиль линии: сплошной, пунктирный, штриховой, штрих пунктирный, прозрачный и т.д. |
Width | Задает толщину линии в пикселях |
В большинстве случаев использование этих свойств не вызывает затруднений.
Замечания. Если нам необходимо скрыть окно, на котором выведено рисунок и текст, а затем его снова активизировать, то окажется, что рисунок на форме исчез. Это произошло потому, что рисунок пока носит временный характер. Чтобы сделать его постоянным, нужно поместить программный код в обработчик события OnPaint формы. Тогда при необходимости перерисовать окно будет генерироваться событие OnPaint
— рисунок восстановится.
Штриховой и пунктирный стиле можно использовать только при работе с пером толщиной 1 пиксел. С помощью стиля psClear можно изымать линии, которые рисуются на внешней границе таких объектов, как, например, прямоугольники, эллипсы, и закрашены многоугольники.
1.4 .класс TВrush.
Кисти определяют способ окраски фигур. С помощью активной кисти заполняется внутренняя область каждой из нарисованных фигур — эллипсов, прямоугольников, многоугольников и тому подобное. Кисть может нарисовать штриховку или битовую матрицу. Внешний вид кисти можно контролировать с помощью свойства Brash класса TCanvas, который, в свою очередь, является объектом класса TBrash. Как и TPen, TBrush не содержит методов и событий для программирования.
Свойства класса TBrush:
свойство | описание |
Bitmap | Идентифицирует битную матрицу, которая используется в качестве фона кисти |
Color | Задает цвет кисти |
Handle | Представляет собой дескриптор кисти (HBRUSH). Используется в случае прямых вызовов соответствующей функцией API |
Style | Определяет стиль кисти: сплошной, прозрачный, одна из возможных штриховок |
Свойство Style по умолчанию имеет значение bsSolid (сплошная заливка). Если при закрашивании геометрических фигур Вы хотите использовать штриховку, то свойства Style нужна присвоить один из следующих стилей: bsHorizontal, bsVertical, bsFDiagonal, bsBDiagonal, bsCross, bsDiagCross.
Когда Вы используете кисть — штриховку, ее свойство Color определяет цвет линии штриховки. При закрашивании графических объектов с помощью такой кисти VCL автоматически устанавливает режим фона в Transparent (например, прозрачный). Это значит, что цвет фона кисти будет совпадать с цветом окна, на котором нарисован графический объект.