Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КурРаб_ВМИП.doc
Скачиваний:
4
Добавлен:
03.11.2018
Размер:
760.83 Кб
Скачать

6.2.5. Методы вычерчивания графиков

Рисовать на холсте можно разными способами – с помощью точек (пикселей), линий, окружностей, дуг, секторов, прямоугольников, многоугольников.

Рисование с помощью пера Pen

Если в качестве графического примитива используется линия, то этот метод относится к рисованию на холсте с помощью пера. У холста имеется свойство PenPos типа TPoint. Это свойство определяет текущую позицию пера на поверхности объекта. Перемещение текущего указателя в новую позицию без прорисовки линии, т.е. изменения свойства PenPos, производится методом холста MoveTo (X,Y : Integer). В результате выполнения этой процедуры перо устанавливается в новую позицию с координатами X и Y, но на холсте ничего не рисуется. Эта текущая точка становится исходной. От неё методом LineTo (X, Y : Integer) можно провести (нарисовать) линию до следующей точки с новыми координатами X и Y. При повторном вызове LineTo (X, Y) конечная точка становится текущей, от которой будет проводиться другая линия и т.д.

Например, инструкции вида

Image1.Canvas.MoveTo(0,200);

Image1.Canvas.LineTo(500,200);

обеспечивают перемещение пера в указанную точку холста (X=0; Y=200), а затем вычерчивать линию от текущей позиции пера (0,200) в точку с координатами (500,200).

Рассмотрим пример вычерчивания рисунка с помощью примитивов: линии, прямоугольника, эллипса.

Поместим на форму Form1 компонент Image1, кнопки Bitbtn1 и Bitbtn. Для этих кнопок установим свойству Kind значение bkOK и bkClose, а свойству Caption – надписи Нарисовать и Завершить соответственно. Кроме того, установим размеры компонента Image1 – Width:=430; Height:=275.

Рассмотрим код обработчика события OnClick для кнопки «Нарисовать», при реализации которого, вычерчивается рисунок (рис.11) на поверхности компонента Image1.

Image1

Рис.11. Рисунок, полученный с помощью примитивов.

. . . // фрагмент модуля

var

Form1: TForm1;

BarColor:array[1..3] of TColor = (clFuchsia, clYellow, clLime);

//объявление глобальной переменной BarColor, с заданными цветами

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);

var

x, y: integer; //текущие координаты прямоугольника

i: byte; //счетчик

const

WX=50; WY=50; //смещения по оси Х и по оси Y

begin

with Image1.Canvas do //на поверхности канвы установить

begin //атрибуты пера:

Pen.Width:=2; //толщина пера

Pen.Color:=clBlue; //цвет пера

MoveTo(0,250); //переместить перо в указанную точку

LineTo(450,250); //провести линию

Brush.Color:=clAqua; //цвет заливки голубой

Ellipse(210,50,240,100); //нарисовать фигуру эллипс

Pen.Width:=1; //толщина пера

Pen.Style:=psDot; //стиль контура столбика пунктирная линия

x:=100; //начальные координаты для построения 1-го столбика

y:=250;

for i:=1 to 3 do //цикл для построения 3-х прямоугольников

begin //цвет i-го прямоугольника

Brush.Color:=BarColor[i]; //нарисовать прямоугольник

Rectangle(x,y,x+350-100*i,y-50); //с заданными координатами

x:=x+WX; //приращение координаты х

y:=y-WY; //приращение координаты y

end;

Brush.Color:=clWhite; //стирание цветной области за текстом

Font.Color:=clBlack; //цвет шрифта черный

Font.Size:=16; //размер символов шрифта

TextOut(300,50,'Пирамида'); //вывод текста

Pen.Style:=psSolid; //установка атрибутов пера

Pen.Color:=clRed; Brush.Color:=clRed;

Chord(10,150,100,200,100,175,10,175); //сегмент - шапка гриба

Pen.Color:=clWhite; Brush.Color:=clWhite;//установка атрибутов пера

Ellipse(47,155,62,165); //рисование эллипсов на шапке

Ellipse(25,160,40,170);

Ellipse(70,160,85,170);

Pen.Color:=clBlack; //установка атрибутов пера

Rectangle(47,175,62,250); //рисование ножки гриба

Arc(39,200,69,216,69,208,39,208); //дуга - оборка на ножке гриба

end;

end;

end.