Шупрута В.В. - Delphi 2005 - Учимся программировать (1080891), страница 52
Текст из файла (страница 52)
LineTo(xO+_width,yO);// Рисуем подписи к оси X и вспомогательную сетку.x:=xO+dx;for i:=l to 7 dobeginMoveTo(x,yO-3);LineTo(x,yO+3);TextOut(x-15,yO+10,lbll[i]);Pen.Style:=psDot;MoveTo(x,yO-3);LineTo(x,yO-_height);Pen.Style:=psSolid;x:=x+dx;end;// Рисуем подписи к оси Y и вспомогательную сетку.y:=yO-dy;for i:=l to 7 dobeginMoveTo(xO-3,у);LineTo(xO+3,y);TextOut(xO-25,y,FloatToStr(lbl_Y));Pen.Style:=psDot;MoveTo(xO+3,y);LineTo(xO+_width,y);Pen.Style:=psSolid;y:=y-dy;lbl_Y:=lbl_Y+dlbl_Y; .end;// Рисуем график функции.Pen.Width:=3,•Pen.Color:=clRed;Изучаем основные графические примитивыMoveTo(xO+dx,yO-dy);for i:=l to 7 do PolyLine(price);end;end;end.•Unl3l^ВДКер исгоАэомии.
методо! line гоиРб^йР"380037003600•/ж35O0\3400\33003200-понедельник вторниксредаЧ"\ X""/тчетверг" пятю-адасубботавоскресеньеРис. 8.4 т Результат работы программы с использованием методов LineTo и PolyLineРезультат работы программы показан на рис. 8.4.ПрямоугольникПрямоугольник можно начертить методом Rectangle. В качестве параметров этогометода указываются координаты двух углов, расположенных на одной диагонали:<Компонент>.Canvas.Rectangle(xl,yl,x2,y2);Методом RoundRec t также можно начертить прямоугольник. Отличие данногометода от предыдущего состоит в том, что прямоугольник рисуется со скругленными углами.
Инструкция вызова метода RoundRec выглядит следующим образом:<Компонент>.Canvas.RoundRect(xl,yl,х2,у2,хЗ,уЗ);где хЗ и уЗ - параметры, которые определяют «скругленность» углов прямоугольника. На рис. 8.5 можно увидеть, что параметры хЗ и уЗ задают размерэллипса, четверть которого используется для рисования скругленного угла.ГЛАВА 8 • Изучаем основы работы с графикой в Win32хз(X1.Y1)Y3J .(X2.Y2)Рис. 8.5 т Значение параметров при вызове метода RoundRectПри рисовании прямоугольника вид линии контура (ее цвет, ширина истиль) определяется текущими установками карандаша (ТРеп), а стиль и цветзаливки - установками кисти (TBrush).Существуют также и другие методы рисования прямоугольников. МетодF i l l R e c t рисует закрашенный прямоугольник, метод FrameRect - контурпрямоугольника.
Отличие данных методов от рассмотренных ранее состоит втом, что им передается только один параметр - структура типа Rect. Поляструктуры содержат координаты прямоугольной области, которые заполняются с помощью функции Rect. Пример использования методов рисованияпрямоугольников приведен ниже в листинге 8.4.Листинг 8.4 т Пример использования методов рисования прямоугольниковprocedure TForml.FormPaint(Sender: TObject);varreel,rec2:TRect; // Структуры для рисования методами FillRect и// FrameRect.begin// Рисуем прямоугольники с помощью методов Rectangle и RoundRect.with Forml.Canvas dobeginBrush.Color:=clMaroon;Rectangle(20,20,100,80);Brush.Color:=clBlue;RoundRect(120,20,200,80,20,10);end ;// Заполняем поля структур Rect.recl:=Rect(20,120,100,180);rec2:=Rect(120,120,200,180);// Рисуем прямоугольники с помощью методов FillRect и FrameRect.with Forml.Canvas dobeginИзучаем основные графические примитивыBrush.Color:=clRed;FillRect(reel);Brush.Color:=clBlue;FrameRect(rec2);end;end;Результат работы программы можно увидеть на рис.
8.6.Рис. 8.6 т Результат применения различных методов рисования прямоугольниковМногоугольникМногоугольник можно нарисовать методом Polygon. При этом вычерчиваетсяконтур многоугольника. Инструкция рисования многоугольника выглядитследующим образом:<Компонент>.Canvas.Polygon(M_points);Параметр M_points представляет собой массив из элементов типа TPoint.Эти элементы являются узловыми вершинами (так же, как и в случае рисованияломаной линии). Вершина, которая является последней в массиве, соединяетсяс первой вершиной.Цвет и стиль границы многоугольника определяются значениями свойствкарандаша (ТРеп), а цвет и стиль заливки - свойствами кисти (TBrush).Например, следующий фрагмент кода (листинг 8.5) вычерчивает правильныйвосьмиугольник с использованием метода Polygon.Листинг 8.5 т Использование метода Polygonprocedure TForml.FormPaint(Sender: TObject);var xO,yO:integer;// Координаты геометрического центра фигуры.angle:integer;ГЛАВА 8 • Изучаем основы работы с графикой в Win32dangle:integer;radius:integer;n:integer;dx,dy:integer;P_Array:array[1.// Угол, образуемый между соседними вершинами.// Радиус окружности, в которую вписана фигура.// Число вершин фигуры..8] of TPoint; // Массив с координатами 8// вершин.// Счетчик цикла.1:integer;begin// Выполняем начальные установки.хО:=135;уО:=1ОО;п:=8;radius:=50;dangle:=round(360/n) ; // Определяем угол между двумя соседними// в ершинами.angle:= 90;// Начальный угол = 90.// Определяем в цикле координаты (х,у) вершин многоугольника.for i:=l to n dobegindx:=round(radius*cos(PI*angle/180));dy:=round(radius*sin(PI*angle/180));angle:=angle+dangle;P_Array[i].x:=xO+dx;P_array[i].y:=yO-dy;end;// Рисуем правильный восьмиугольник.Forml.Canvas.Brush.Color:=clRed;Forml.Canvas.Polygon(P_Array);end;А на экране результат выполнения данного кода будет выглядеть так, какпоказано на рис.
8.7.Рис. 8.7 т Применение метода PolygonИзучаем основные графические примитивыОкружность и эллипсЭллипс можно нарисовать методом E l l i p s e . Этот же метод рисует иокружность, которая является частным случаем эллипса. В качестве параметровметода указывается прямоугольная область, ограничивающая фигуру (рис. 8.8):<Компонент>.Canvas.Ellipse(xl,yl,x2,у2);(X1.Y1)Рис. 8.8 • Способ задания эллипсаЦвет и стиль границы эллипса определяются значениями свойствкарандаша (ТРеп), а цвет и стиль заливки - свойствами кисти (TBrush).
-ДугаДуга представляет собой часть эллипса. Поэтому в методе Arc, которыйпозволяет нарисовать дугу, в качестве параметров необходимо дополнительноуказать две точки, определяющие начало и конец дуги. Инструкция вызоваметода Arc выглядит следующим образом:<Компонент>.Canvas.Arc(xl,yl/x2,у2,хЗ,уЗ,х4,у4);Параметры xl, y l , х2, у 2 определяют эллипс, частью которого являетсядуга. Параметры (хЗ, уЗ) задают начальную точку дуги, (х4, у4) - конечнуюточку дуги (рис. 8.9).Необходимо заметить, что дуга вычерчивается против часовой стрелки, отначальной точки (хЗ, уЗ) к конечной (х4, у4).(X1.Y1)(X3.Y3) .(X4.Y4)(X2.Y2)Рис. 8.9 т Способ задания дуги•ГЛАВА 8 • Изучаем основы работы с графикой в Win32СекторСектор задается тем же способом, что и дуга. Для рисования сектора необходимо использовать метод Pie:<Компонент>.Canvas.Pie(xl,yl,х2,у2,хЗ, у З , х 4 , у 4 ) ;Параметры x l , y l , х2, у2 также задают прямоугольную область.
Секторвырезается против часовой стрелки от прямой, заданной точкой с координатами (хЗ, уЗ), к прямой, заданной точкой с координатами (х4, у4). Всевышесказанное иллюстрирует рис. 8.10.(X3.Y3)(X4.Y4)I(X2.Y2)Рис. 8.10 т Способ задания сектораТочкаУ поверхности Canvas, на которую осуществляется вывод графики, существуетсвойство P i x e l s , которое представляет собой двумерный массив типа TColor.Этот массив содержит информацию о цвете каждой точки графическойповерхности.
Используя свойство P i x e l s , можно задавать цвет для любой точкиграфической поверхности. Например, инструкция следующего видаForml.Canvas.Pixels[100,200]:=clBlue;окрашивает точку (100, 200) в синий цвет.Напомню, что размеры графической поверхности формы определяютсязначениями свойств C l i e n t W i d t h и C l i e n t H e i g h t , в то время как общийразмер компонента определяется значениями свойств Width и H e i g h t .Поэтому максимально доступная поверхность для рисования ограничиваетсяпрямоугольным контуром (0 , 0 , C l i e n t W i d t h - l , C l i e n t h e i g h t - l ) .Данное свойство можно использовать, например, для рисования графиковфункций.
Приведенный ниже фрагмент кода (листинг. 8.6) демонстрируетиспользование свойства P i x e l s .Изучаем основные графические примитивыЛистинг 8.6 т Рисование графика функции с помощью свойства pixelsprocedure TForml.FormPaint(Sender: TObj ect);var xO,yO:integer; // Координаты начала отсчета.i:integer;//'Счетчик цикла - 0..360 градусов.beginх0:=50; уО:=1ОО;for i:=l to 360 doCanvas.Pixels[xO+i,y.0-round(80*sin(PI*i/180))]:=clBlack;end ;Результат использования данного кода приведен на рис. 8.11.Рис.
8.11 т Рисование графика функции у = sin(x) с помощью свойства P i x e l sВывод текстаТекст на графическую поверхность можно вставить с помощью метода TextOut:<Компонент>.Canvas.TextOut(x,y,<Текст>);Пара параметров (х, у) задает положение текста на экране, параметр< Текст > содержит строку текста, которую необходимо отобразить. В качествепримера использования метода TextOut можно привести фрагмент кода,приведенный в листинге 8.7 (процедура обработки события формы OnPaint).Листинг 8.7 т Использование метода TextOutprocedure TForml.FormPaint(Sender: TObject);beginwith Forml.Canvas dobegin// Верхняя надпись - цвет фона совпадает с цветом кисти.ГЛАВА 8 • Изучаем основы работы с графикой в Win32Brush. Color: =clYellow,Font.Size:=18;Font.Style:=[fsItalic,fsBold];TextOut(10,30,'Работас графикой в W i n 3 2 1 ) ;/ / Нижняя надпись - цвет фона совпадает с цветом формы.Brush.Color:=Forml.Color;TextOut(10,70,'Работас графикой в Win32');end;end ;В приведенном примере для вывода текста используется шрифт, заданныйсвойством Font соответствующего объекта Canvas.
Ниже в табл. 8.8приведены свойства объекта Font, задающие различные характеристикишрифта.Таблица 8.8 т Свойства объекта TFontСвойствоКомментарийNameОпределяет имя шрифтаSizeРазмер шрифта. Задается в пунктах (1 пункт равен 1/72 дюйма)StyleСвойство определяет стиль начертания шрифта. Стиль задается следующимиконстантами: f s B o l d - полужирный шрифт, f s l t a l i c - курсив, f sUnderLine подчеркнутый, f s S t r i k e O u t - зачеркнутый. Допускается любое сочетание константColorСвойство определяет цвет символов с помощью константы типа TColorРезультат использования исходного кода, приведенного в листинге 8.7,представлен на рис.
8.12. Как видно из рисунка, область вывода текстазакрашивается текущим цветом кисти. Поэтому если необходимо вывеститекст без фонового цвета, то следует свойство кисти Brush .Color установитьравным свойству Forml. Color.Работа с графикой в Win32Работа с графикой в Win32Рис. 8.12 т Использование метода TextOut для вывода текстаГрафические возможности для создания мультипликацииИспользуем графические возможностидля создания мультипликацииВ главе 6 мы подробно рассмотрели основные вопросы, касающиеся мультипликации. В этой главе создадим аналогичную программу, позволяющуюдостичь того же эффекта.