Работа с графикой
Рисовать в программе можно непосредственно на поверхности формы либо выделяя на форме специальные области для рисования – это делается с помощью компонентов 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.