Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_раб_С++ Builder_2часть.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.11 Mб
Скачать

Лабораторная работа № 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 данной лабораторной работы:

  1. На диске D:\ создайте папку Lab_9 и в этой папке сформируйте внутреннюю папку Sin_9 для файлов проекта P_Sin_9.

  2. Выберите в библиотеке компонент страницу Additional и на форму разместите компоненту Image1, затем маркерной рамкой определите размер под рисунок графика.

  3. На странице Standart выберите кнопку и установите на форму элемент Button1 и замените название на «Расчитать».

  4. Определите событие OnClik для кнопки Button1 .

  5. В шаблон обработчика события 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;

}

}

//---------------------------------------------------------------------------

  1. Для построения инструментом Pen второго графика функции Sin(X) добавте компоненту Image2 .

  2. Необходимо сформировать два одинаковых поля под графики. Удерживая нажатой клавишу Shift замаркируйте Image1, Image2 и выполните команду правой клавишей на форме. В открывшемся меню выберите команду Size и установите опцию Grow to largest или Shrink to smallest.

  3. Измените в обработчике события 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 данной лабораторной работы:

  1. На диске D:\ , в созданной папке Lab_9 , нужно сформировать внутреннюю папку Figures_9 для файлов проекта P_Figures_9.

  2. На форме задайте поле 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");

}

//---------------------------------------------------------------------------

  1. Выполните компиляцию и получите такой результат

Дата _______________________

(відпрацювання лаб. роботи)

Студент___________________ Група ____________

Складови знань

Бали для

оцінювання знань

Уміння змінювати та

налагоджувати алгоритм

С++ програми

Знання програмного та

файлового забезпечення

лабораторної роботи

2,0

1,0

Набрані бали

Дата __________________ Викладач ______________________

(захисту лаб. роботи) (підпис)