
- •Методические указания
- •Часть 2
- •Лабораторна робота № 1
- •Загальні зведення про компоненти для розробки меню команд і вбудовування малюнків та значків на форму програми
- •Лабораторная работа № 2
- •Лабораторная работа № 3
- •Общие сведения о видах команд отладки для поиска
- •Лабораторная работа № 4
- •Общие сведения
- •2. Постановка задач лабораторной работы
- •Лабораторная работа № 5
- •Общие сведения о компонентах, инструментах для рисования
- •Лабораторная работа № 6 Обработка событий мышки в приложении Windows
- •1. Общие сведения о событиях мышки
- •2. Постановка задачи лабораторной работы.
- •3. Порядок действий и команд при выполнении работы.
- •Лабораторная работа № 7
- •Результат работы программы
- •Лабораторная работа № 8
- •Шаг 4. Установите на форму компоненты ListView1 и ListView2 , как это показано рис.3.
- •Лабораторная работа № 9
- •Лабораторная работа № 10
Лабораторная работа № 5
Компоненты, инструменты и функции С++ Builder
для графических построений
Цель лабораторной работы состоит в изучении применения компонент, инструментов, свойств, методов и функций для построения элементов графических изображений при разработке приложений.
Общие сведения о компонентах, инструментах для рисования
Для отображения графической информации в библиотеке С++ Builder имеются компоненты, список которых приведен ниже в табл .5.1.
Компоненты для отображения графических изображений Таблица 5.1
Пиктограмма |
Наименование компоненты |
Страница библиотеки |
Назначение |
|
9Image (изображение) |
Additional |
Используется для отображения графики: пиктограмм, битовых матриц и метафайлов |
|
DBImage (изображение данных) |
Data Controls |
Связанный с данными аналог Image |
|
PaintBox (окно для рисования) |
System |
Используется для создания на форме некоторой области, в которой можно рисовать |
Кроме этого, отображать и вводить графическую информацию можно на поверхности любого оконного компонента, имеющего свойство Canvas – канва(холст). Канва Canvas не является компонентой. Многие компоненты в С++ Builder имеют свойство Canvas, представляющее собой область компоненты, на которой можно рисовать или отображать готовые изображения. Это свойство имеют формы, графические компоненты Image, DBImage, PaintBox и многие другие. Канва содержит свойства и методы, существенно упрощающие работу с графикой в С++ Builder и все сложные взаимодействия с системой спрятаны для пользователя.
Каждая точка канвы имеет координаты X и Y . Система координат канвы начинается в левом верхнем углу области холста. Кордината X возрастает при изменении слева направо, а кордината Y изменяется сверху вниз. Кординаты изменяются в пикселях.
Пиксель – это наименьший элемент в изображении рисунка, которым можно манипулировать. Важнейшее свойство пикселя – это цвет. Для описания цвета используется тип Tcolor.
Рисовать на канве можно разными способами. Первый вариант(Pixels) – рисование по отдельным пикселям. Второй вариант(Pen) – рисование пером Pen .
Свойство Pixels у канвы представляет собой двумерный массив, определяющий цвета точек на канве:
Cavas->Pixels[int X][int Y]
С массивом пикселей можно обращаться как с любым свойством: изменять цвет, задавать пикселю новое значение, или определять его цвет константой. Например, Cavas->Pixels[int X][int Y] = clBlue; - здесь задается пикселю синий цвет. При необходимости нарисовать некоторый график функции F(x) на канве компоненты Image , если заданы значения Ymin, Ymax и Xmin, Xmax., можно если описать кодом такой процедуры
//--------------------------------------------------------------
float x, y; //---координаты функции
float PX, PY; //---координаты пикселей
for( PX=0; PX <= Image1->Width; PX ++ )
{ //--x – координата, соответствующая пикселю с координатой РХ
x = Xmin + PX*(Xmax - Xmin) / Image -> Width;
y = F(x);
//--PY –координата пикселя, соответствующая координате y
PY = Image1->Width – (y - Ymin)* Image->Height/(Ymax - Ymin);
//---устанавливается черный цвет выбранного пикселя
Image1->Canvas->Pixels[PX][PY] = clBlack;
}
//--------------------------------------------------------------
У канвы имеется свойство Pen – перо. Это объект, в свою очередь имеющий ряд свойств. Свойство Color –цвет, которым наносится рисунок, свойство Widht – ширина рисуемой линии. Ширина линии задается в пикселях и по умолчанию равна 1. Свойство Style – определяет вид линии. Это свойство может принимать такие значения:
psSolid psDash psDot psDashDot psDashDotDot psClear psInsideFrame |
Сплошная линия Штриховая линия Пунктирная линия Штрих-пунктирная линия Линия,чередующая штрих и два пунктира Отсутствие линии Сплошная линия и при Widht > 1 допускаются цвета отличные от цветов Windows |
Все стили со штрихами и пунктирами доступны только при Widht = 1. В противном случае лини этих стилей рисуются как сплошные. Стиль psInsideFrame – единственный, который допускает произвольные цвета. Цвет линии при остальных стилях округляется до ближайшего из палитры Windows. Свойство PenPos – определяет в координатах канвы текущую позицию пера. Изменение PenPos, т.е. перемещение пера без прорисовки линии выполняется с помощью метода канвы MovеTo(X,Y). Здесь (Х,У) – координаты точки, в которую перемещается перо.Эта текущая точка становится исходной, от которой методом LineTo(X,Y) можно провести линию в точку с координатами (Х,У). При этом текущая точка перемещается в конечную точку линии и новый вызов LineTo(X,Y) будет проводить линию из этой новой текущей точки.
Перо Pen может рисовать не только прямые линии , но базовые фигуры. Ниже перечислены некотрые из методов канвы, использующие перо для рисования фигур:
Arc Chord
Ellipse Pie Polygon Polyline Rectangle RoundRect |
Рисует дугу окружности или эллипса Рисует замкнутую фигуру, ограниченную дугой окружности или эллипса и хордой Рисует эллипс или окружность Рисует сектор окружности или эллипса Рисует замкнутую фигуру с кусочно-линейной границей Рисует кусочно-линейную кривую Рисует прямоугольник Рисует прямоугольник со скругленными углами |
У канвы имеется свойство Brush – кисть. Это свойство определяет фон и заполнение замкнутых фигур на канве. Brush – это объект, имеющий в свою очередь ряд свойств. Свойство Color определяет цвет заполнения. Свойство Style – определяет шаблон заполнения (штриховку).
Постановка задачи лабораторной работы. Задание №1. Необходимо создать приложение, демонстрирующее построение графика функции Sin(X) двумя способами: первый вариант – рисование графика на канве с помощью Pixels ; второй вариант – рисование графика с помощью инструмента Pen методами MovеTo(X,Y) и LineTo(X,Y) .
Задание №2.Необходимо создать приложение, демонстрирующее построение фигур с помощью инструмента Pen в режиме рисования стандартных фигур.
Порядок действий и команд при выполнении Задания №1 данной лабораторной работы:
На диске D:\ создайте папку Lab_9 и в этой папке сформируйте внутреннюю папку Sin_9 для файлов проекта P_Sin_9.
Выберите в библиотеке компонент страницу Additional и на форму разместите компоненту Image1, затем маркерной рамкой определите размер под рисунок графика.
На странице Standart выберите кнопку и установите на форму элемент Button1 и замените название на «Расчитать».
Определите событие OnClik для кнопки Button1 .
В шаблон обработчика события TForm1::Button1Click(TObject *Sender) добавте код, чтобы строился график функции Sin(X) с помощью изменения координат Pixels
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "U_Sin_9.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
#include <math.h>
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
#define Pi 3.14159
float X,Y; // координаты функции
int PX,PY; // координаты пикселей
for (PX = 0; PX <= Image1->Width; PX++)
{
//X - координата, соответствующая пикселю с координатой PX
X = PX * 4 * Pi / Image1->Width;
Y = sin(X);
//PY - координата пикселя, соответствующая координате Y
PY = Image1->Height - (Y+1) * Image1->Height / 2;
//Устанавливается цвет выбранного пикселя
Image1->Canvas->Pixels[PX][PY] = clRed;
}
}
//---------------------------------------------------------------------------
Для построения инструментом Pen второго графика функции Sin(X) добавте компоненту Image2 .
Необходимо сформировать два одинаковых поля под графики. Удерживая нажатой клавишу Shift замаркируйте Image1, Image2 и выполните команду правой клавишей на форме. В открывшемся меню выберите команду Size и установите опцию Grow to largest или Shrink to smallest.
Измените в обработчике события TForm1::Button1Click(TObject *Sender)
код программы на такой
//---------------------------------------------------------------------------
#include <math.h>
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
#define Pi 3.14159
float X,Y; // координаты функции
int PX,PY; // координаты пикселей
Image2->Canvas->MoveTo(0,Image2->Height/2);
for (PX = 0; PX <= Image1->Width; PX++)
{
//X - координата, соответствующая пикселю с координатой PX
X = PX * 4 * Pi / Image1->Width;
Y = sin(X);
//PY - координата пикселя, соответствующая координате Y
PY = Image1->Height - (Y+1) * Image1->Height / 2;
//Устанавливается цвет выбранного пикселя
Image1->Canvas->Pixels[PX][PY] = clRed;
//Проводится линия на втором графике черным цветом
Image2->Canvas->LineTo(PX,PY);
}
}
//---------------------------------------------------------------------------
9. Выполните компиляцию программы и получите результат в следующем виде
Порядок действий и команд при выполнении Задания №2 данной лабораторной работы:
На диске D:\ , в созданной папке Lab_9 , нужно сформировать внутреннюю папку Figures_9 для файлов проекта P_Figures_9.
На форме задайте поле Image1 и заполните в программный модуль U_Figures_9 следующий текст кода программы:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "U_figures_9.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Image1->Canvas->Font->Style << fsBold;
Image1->Canvas->Arc(10,10,90,90,90,50,10,50);
Image1->Canvas->TextOut(40,60,"Arc");
Image1->Canvas->Chord(110,10,190,90,190,50,110,50);
Image1->Canvas->TextOut(135,60,"Chord");
Image1->Canvas->Ellipse(210,10,290,50);
Image1->Canvas->TextOut(230,60,"Ellipse");
Image1->Canvas->Pie(310,10,390,90,390,30,310,30);
Image1->Canvas->TextOut(340,60,"Pie");
TPoint points[5];
points[0] = Point(30,150);
points[1] = Point(40,130);
points[2] = Point(50,140);
points[3] = Point(60,130);
points[4] = Point(70,150);
Image1->Canvas->Polygon(points,4);
Image1->Canvas->TextOut(30,170,"Polygon");
points[0].x += 100;
points[1].x += 100;
points[2].x += 100;
points[3].x += 100;
points[4].x += 100;
Image1->Canvas->Polyline(points,4);
Image1->Canvas->TextOut(130,170,"Polyline");
Image1->Canvas->Rectangle(230,120,280,160);
Image1->Canvas->TextOut(230,170,"Rectangle");
Image1->Canvas->RoundRect(330,120,380,160,20,20);
Image1->Canvas->TextOut(325,170,"RoundRect");
}
//---------------------------------------------------------------------------
Выполните компиляцию и получите такой результат
Дата _______________________
(відпрацювання лаб. роботи)
Студент___________________ Група ____________
Складови знань
Бали для оцінювання знань |
Уміння змінювати та налагоджувати алгоритм С++ програми |
Знання програмного та файлового забезпечення лабораторної роботи |
2,0 |
1,0 |
|
Набрані бали |
|
|
Дата __________________ Викладач ______________________
(захисту лаб. роботи) (підпис)