Работа с графикой

Рисовать в программе можно непосредственно на поверхности формы либо выделяя на форме специальные области для рисования – это делается с помощью компонентов Image и PaintBox. Форма и указанные компоненты имеют свойство Canvas (Холст), которое позволяет выводить графику. Например, оператор

Form1->Canvas->Rectangle(20, 20, 60, 60);

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

В следующей таблице приводятся методы свойства Canvas, позволяющие рисовать основные графические примитивы.

Методы вычерчивания графических примитивов

Метод Действие
MoveTo(x, y) Перемещает курсор в позицию с заданными координатами (отсчет координат ведется от левого верхнего угла формы или области рисования)
LineTo(x1, y1) Рисует прямую линию от текущей позиции до точки с координатами (x1, y1)
Polyline(points, n) Рисует ломаную линию; points – массив точек перегиба линии (см. пример ниже), n – количество узлов линии
Rectangle(x1, y1, x2, y2) Рисует прямоугольник, x1, y1, x2, y2 – коорди-наты левого верхнего и правого нижнего углов прямоугольника соответственно.
FillRect(x1, y1, x2, y2) Рисует закрашенный прямоугольник
Ellipse(x1, y1, x2, y2) Рисует эллипс. X1, y1, x2, y2 задают координаты прямоугольника, в который вписывается эллипс
Arc(x1, y1, x2, y2, x3, y3, x4, y4) Рисует дугу. Параметры x1, y1, x2, y2 определяют эллипс, частью которого является дуга, x3, y3, x4, y4 задают начальную и конечную точку дуги
Pie(x1, y1, x2, y2, x3, y3, x4, y4) Рисует сектор эллипса или круга. Сектор вырезается против часовой стрелки от точки с координатами (x3, y3) до точки (x4, y4)
TextOutA(x, y, текст) Выводит текст, заданный третьим параметром. Параметры x, y определяют начальную точку, с которой начинается вывод

Для вывода отдельных точек используется свойство Pixels[x][y] свойства Canvas. Например, следующий оператор выводит на форму точку красного цвета с координатами (50, 50):

Form1->Canvas->Pilxels[50][50]=clRed;

Здесь clRed – именованная константа, соответствующая красному цвету.

Для окрашивания точки в произвольный цвет используется функция RGB(red, green, blue), где параметры red, green, blue задают доли красного, зеленого и синего цвета в составе данного цвета и могут принимать значения в интервале (0, 255), например:

Form1->Canvas->Pilxels[50][50]=RGB(0, 163, 78);

Вышеописанные методы обеспечивают только вычерчивание графических примитивов. Вид графического элемента определяют свойства Pen (Карандаш) и Brush (Кисть) той поверхности (Canvas), на которой рисуется данный элемент. Карандаш и Кисть, являясь свойствами объекта Canvas, в свою очередь представляют собой объекты. Свойства объектов Pen и Brush описаны в следующих далее таблицах.

Свойства объекта Pen

Свойство Определяет
Color Цвет линии
Width Толщину линии (в пикселах)
Style Вид линии. psSolid – сплошная; psClear – линия не отображается; psDash – пунктирная с длинными штрихами; psDot – пунктирная с короткими штрихами; psDashDot – чередование длинных и коротких штрихов

Свойства объекта Brush

Свойство Определяет
Color Цвет закрашивания замкнутой области
Style Стиль заполнения области. bsSolid – сплошная заливка; bsHorizontal – горизонтальная штриховка; bsVertical – вертикальная штриховка; bsFDiagonal – диагональная штриховка с наклоном вперед; bsBDiagonal – диагональная штриховка с наклоном назад; bsCross – в клетку; bsDiagCross – диагональная клетка

Свойство Font Холста позволяет изменять параметры шрифта. В следующей таблице описываются свойства объекта Font.

Cвойства объекта Font

Свойство Определяет
Name Используемый шрифт. Значение свойства – название шрифта, например Arial
Size Размер в пунктах
Style Стиль начертания шрифта. Задается следующими константами: fsBold – полужирный; fsItalic – курсив; fsUnderline –подчеркнутый; fsStrikeOut – перечеркнутый
Color Цвет символов. Задается с помощью именованных констант, например clRed, или с помощью функции RGB( )

Пример 1. Вывод в области рисования PaintBox красной точки и прямой линии черного цвета по нажатии точки.

Запустите новый проект. Поместите на форме проекта компонент PaintBox (вкладка Win32) и кнопку Button. Для функции обработки нажатия кнопки напишите следующй код:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

PaintBox1->Canvas->Pixels[10][10]=clRed;

PaintBox1->Canvas->MoveTo(50,50);

PaintBox1->Canvas->LineTo(100,100);

}

Пример 2. Вывод заштрихованной окружности непосредственно на поверхность формы.

Используем обработчик события OnPaint (перерисовка) формы. Для функции обработки события OnPaint напишите следующий код:

void __fastcall TForm1::FormPaint(TObject *Sender)

{

Form1->Canvas->Ellipse(40,40,140,140);

}

Пример 3. Использование объектов Pen и Brush.

Поместите на форму еще одну кнопку Button. Для функции обработки щелчка по кнопке напишите следующий код:

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Form1->Canvas->Brush->Color=clRed;

Form1->Canvas->Brush->Style=bsCross;

Form1->Canvas->Pen->Width=3;

Form1->Canvas->Ellipse(40,40,140,140);

}

Пример 4. Работа со шрифтом.

Используйте обработчик события создания формы OnPaint. Добавьте код вывода текста в функцию обработки события перерисовки формы:

void __fastcall TForm1::FormPaint(TObject *Sender)

{

Form1->Canvas->Ellipse(40,40,140,140);

Form1->Canvas->Font->Name="Times New Roman";

Form1->Canvas->Font->Size=20;

Form1->Canvas->Font->Color=clBlue;

Form1->Canvas->TextOutA(100, 5, "Примеры работы с графикой в C++ Builder");

}

Сохраните проект и проверьте его работу.

Задание

Написать программу, выводящую на форму график функции у(x) = sin(x)ex/5 в заданном пользователем интервале и с заданным шагом по x.

Наши рекомендации