Учись программированию на C++ Builder бесплатно!

У канвы имеется свойство Brush - кисть. Это свойство определяет фон и заполнение замкнутых фигур на канве. Brush - это объект, имеющий в свою очередь ряд свойств. Свойство Color определяет цвет заполнения. Свойство Style определяет шаблон заполнения (Штриховку).

Свойство Bitmap, являющееся указателем на объект типа TBitmap и определяющее нестандартное заполнение заданным шаблоном. Шаблон задается битовой матрицей размером 8x8. Если для кисти задан шаблон Bitmap, то заполнение производится именно этим шаблоном, независимо от значения свойства Style.

Шаблон Bitmap может создаваться в процессе выполнения приложения или, например, загружаться из файла, как в приведенном ниже примере, в котором фон формы заполняется загруженным шаблоном:

Graphics::TBitmap *BrushBmp = new Graphics::TBitmap;
try
{
BrushBmp->LoadFromFile("MyBitmap.bmp");
Form1->Canvas->Brush->Bitmap = BrushBmp;
Form1->Canvas->FillRect(Rect(0,0,Form1->Width,Form1->Height));
}
__finally
{
Form1->Canvas->Brush->Bitmap = NULL;
delete BrushBmp;
}

В этом примере создается объект BrushBmp типа TBitmap и в него загружается битовая матрица из файла с именем MyBitmap.bmp. Затем свойству Form1->Canvas->Brush->Bitmap присваивается указатель на этот объект. После этого загруженный шаблон можно использовать для заполнения фигур на канве формы. Метод FillRect рисует на канве заполненный шаблоном прямоугольник, занимающий всю площадь формы. Если подобный код вставить в обработчик события формы OnResize, то и при изменении пользователем размеров формы ее поверхность будет вся заполнена шаблоном. После этого (а также в случае генерации каких-то исключений) Bitmap присваивается значение NULL, после чего заполнение опять начинает определяться свойством Style. Затем объект BrushBmp уничтожается, чтобы освободить занимаемую им память.

Метод канвы FillReet заполняет заданным стилем или шаблоном прямоугольную область, заданную параметром Rect. Этот параметр имеет тип TRect. Для его задания проще всего использовать функцию Rect(X1,Y1,X2,Y2), возвращающую структуру Rect с координатами углов, заданных параметрами (X1, Y1) и (X2, Y2).

Функцию FillReet удобно, в частности, использовать для стирания изображения.
Например, оператор очищает всю площадь канвы компонента Image1:

Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));

Кисть участвует в заполнении фигур не только с помощью этой функции. Все методы рисования замкнутых фигур тоже заполняют их с помощью кисти. Это относится к методам Chord, Ellipse, Pie, Polygon и др.

Имеется еще один интересный метод, работающий с кистью. Это метод FloodFill, который заполняет замкнутую область на канве. Точка с координатами X и Y является произвольной внутренней точкой заполняемой области, которая может иметь произвольную форму. Граница этой области определяется сочетанием параметров Color и FillStyle. Параметр Color указывает цвет, который используется при определении границы заполняемой области, а параметр FillStyle определяет, как именно по этому цвету определяется граница. Параметр FillStyle может принимать одно из двух следующих значений: fsSurface или fsBorder. Если FillStyle = fsSurface, то заполняется область, окрашенная цветом Color, а на других цветах метод останавливается. Если FillStyle = fsBorder, то наоборот, заполняется область окрашенная любыми цветами, не равными Color, а на цвете Color метод останавливается.

Для определения области закрашивания можно использовать координаты и цвет одного из пикселов, расположенных внутри области (если FillStyle = fsSurface) или снаружи ее (если FillStyle = fsBorder).

Имеется еще один метод канвы, связанный с кистью. Это метод FrameRect. Он рисует на канве текущей кистью прямоугольную рамку, не закрашивая ее.

Параметр Rect определяет позицию и размеры прямоугольной рамки. Толщина рамки 1 пиксел. Область внутри рамки кистью не заполняется. Метод FrameRect отличается от метода Rectangle тем, что рамка рисуется цветом кисти (в методе Rectangle - цветом пера) и область не закрашивается (в методе Rectangle закрашивается).

Поделиться