Лабораторная работа № 21.
Работа с графикой

Время выполнения

 4 часа

Цель работы

Научиться разрабатывать программы для построения изображений в среде Borland Delphi.

Задачи лабораторной работы

После выполнения работы студент должен:
  • знать основы работы с графическими процедурами в среде Delphi;
  • уметь самостоятельно написать программу для построения изображений средствами языка программирования Delphi.

Перечень обеспечивающих средств

Для обеспечения выполнения работы необходимо иметь компьютер со следующим математическим обеспечением: операционная система Windows 2003 и выше и система визуального программирования Delphi на основе 6-ой версии.

Общие теоретические сведения

Общие замечания
  1. Программа может выводить графику на поверхность объекта (формы или компонента Image), которой соответствует свойство Canvas.
  2. Для того чтобы на поверхности объекта появился графический элемент необходимо к свойству Canvas этого объекта применить соответствующий метод.
  3. Цвет, стиль и толщину линий, вычерчиваемых методами Line, Ellipse, Rectangle и т. д. определяет свойство Pen объекта Canvas.
  4. Цвет закраски внутренних областей геометрических фигур, вычерчиваемых методами Line, Ellipse, Rectangle и т. д, определяет свойство Brush объекта Canvas.
  5. Характеристики шрифта текста, выводимого методом TextOut, определяет свойство Font объекта Canvas.
Процедуры работы с линиями
Line(x1, y1, x2, y2:integer) – проводит линию текущего цвета между точками с координатами x1, y1, x2, y2.
LineRel(Dx, Dy: integer) – проводит линию из текущей позиции в точку, сдвинутую относительно исходной позиции на величины Dx и Dy.
LineTo(x, y) – проводит линию из текущей позиции в точку с заданными координатами x, y.
MoveRel(Dx, Dy: integer) – перемещение указателя на заданное расстояние Dx, Dy по отношению к предыдущему положению.
MoveTo(x, y:integer) – перемещение указателя координат в точку окна с координатами x и y.

Процедуры построения фигур из линий
RecTangle(x1, y1, x2, y2:integer) строит контур прямоугольника текущим цветом;
x1, y1 – координаты верхнего левого угла прямоугольника;
x2, y2- координаты правого нижнего угла прямоугольника.
Bar3D(x1, y1, x2, y2:integer, Dept:Word, Top:Boolean) – строит закрашенный параллелепипед с координатами левого верхнего (x1, y1) и правого нижнего (x2, y2) углов;
Dept – ширина боковой грани;
Top – признак включения верхней грани (True – вычерчивается, иначе не отображается).
DrawPoly(NumPoints:Word; var PolyPoints) – строит контур многоугольника с заданными параметрами и цветом;
NumPoints – число вершин многоугольника;
PolyPoints – переменная без типа, содержащая NumPoint пар координат вершин многоугольника (координаты перечисляются в той последовательности, как они идут по контуру; первая вершина повторяется в конце).
FillPoly(NumPoints:Word; var PolyPoints) – строит многоугольник, закрашенный текущим орнаментом и цветом заполнения. Параметры – по аналогии с DrawPoly.

Процедуры построения криволинейных фигур
Arc(x, y:integer; StAng, EndAng, Rad:Word) – рисует дугу окружности текущим цветом;
x, y – координаты центра дуги;
StAng – угол до начальной точки дуги, отсчитываемый против часовой стрелки от горизонтальной оси, направленный слева направо;
EndAng – угол до конечной точки дуги, отсчитываемый против часовой стрелки от горизонтальной оси, направленный слева направо;
Rad – радиус дуги.
Ellipse(x, y:integer; StAng, EndAng, XRad,YRad:Word) – рисует дугу эллипса текущим цветом;
x, y – координаты центра эллипса;
StAng – угол до начальной точки эллипса, отсчитываемый против часовой стрелки от горизонтальной оси, направленный слева направо;
EndAng – угол до конечной точки эллипса, отсчитываемый против часовой стрелки от горизонтальной оси, направленный слева направо;
XRad,YRad – горизонтальная и вертикальная полуоси эллипса.
Circle(x, y:integer, Rad:Word) – рисует окружность текущим цветом;
x, y – координаты центра окружности;
Rad – радиус окружности.
FillEllipse(x, y:integer; XRad,YRad:Word) – рисует эллипс, закрашенный текущим цветом;
x, y – координаты центра эллипса;
XRad,YRad – горизонтальная и вертикальная полуоси эллипса.
PieSlice(x, y:integer; StAng, EndAng, Rad:Word) – рисует сектор круга, закрашенный текущим цветом;
x, y – координаты центра сектора круга;
StAng – начальный угол сектора, отсчитываемый против часовой стрелки от горизонтальной оси, направленный слева направо;
EndAng – конечный угол сектора, отсчитываемый против часовой стрелки от горизонтальной оси, направленный слева направо;
Rad – радиус сектора.
Sector(x, y:integer; StAng, EndAng, XRad,YRad:Word) – рисует сектор эллипса, закрашенный текущим орнаментом и цветом заполнения;
x, y – координаты центра сектора эллипса;
StAng – начальный угол эллипса, отсчитываемый против часовой стрелки от горизонтальной оси, направленный слева направо;
EndAng – конечный угол эллипса, отсчитываемый против часовой стрелки от горизонтальной оси, направленный слева направо;
XRad,YRad – горизонтальная и вертикальная полуоси эллипса.
Основную работу по выводу графики на поверхность формы должна выполнять функция обработки события OnPaint.

Пример.
Написать программу, которая на поверхности формы рисует флаг Российской Федерации (рис. 1).
 
Рисунок 1. Изображение флага Российской Федерации

Программный код.
// обработка события OnPaint
// процедура рисует флаг Российской Федерации
Procedure TForm1.FormPaint(Sender: TObject);
Const
L=200; //ширина флага(полосы)
H=40;  // высота полосы
Var
X,y:integer; // левый верхний угол
Begin
X:=30;
Y:=50;
With Canvas do 
Begin
// границы, цвет границы должен совпадать с цветом закраски
Brush.Color :=clWhite; // цвет закраски
Pen.Color: =clWhite; // цвет границы
Rectangle(x,y,x+L,y+H);
Brush.Color:=clBlue;
Pen.Color:=clBlue;
Rectangle(x,y+H,x+L,y+3*H);
Brush.Color:=clRed;
Pen.Color: = clRed;
Rectangle(x,y+2*H,x+L,y+3*H);
// контур
Pen.Color: =clBlack;
Brush.Style:=bsClear; // прозрачная кисть
Rectangle(x,y,x+l,y+h*3);
Font.Size:=24;
Font.Name:=’Times New Roman’;
Font.Color:=clWhite;
TextOut(50,200,’Россия’);
Font.Color:=clBlack;
TextOut(51,201,’Россия’);
End;
End;
End.

Варианты заданий

Технология выполнения работы
В данной работе для формы приложения задать обработку события OnPaint, а затем написать процедуру обработки.
При написании процедуры использовать:
Rectangle(a,a,b,c) – построение прямоугольника;
Pen.Color:=clBlack – задание цвета линий;
Ellipse(x,y,z,t) – построение эллипса.

Содержание отчета

  1. Задание и цель работы
  2. Описание формы.
  3. Текст процедуры обработки процесса

Вопросы для защиты работы

  1. Какое свойство используется для вывода графики на поверхность объекта?
  2. Какое свойство объекта Canvas определяет цвет, стиль, толщину линий при использовании методов Line, Ellipse, Rectangle?
  3. Какая функция обработки события используется при выводе графики?