Шупрута В.В. - Delphi 2005 - Учимся программировать (1080891), страница 40
Текст из файла (страница 40)
Создаетсякисть уже знакомым нам методом C r e a t e , но в качестве параметра ему ужепередается текстура (файл картинки). Результат использования текстурнойкисти можно наблюдать на рис. 6.5Листинг 6.4 т Пример создания и использования текстурной кистиprocedure TWinForm2.TWinForm2_Paint(sender: System.Object;e: System.Windows.Forms.PaintEventArgs);var My_Brush:TextureBrush;/ / Текстурная кисть.image_file:Image;/ / Файл с картинкой.i,j:integer;ГЛАВА б • Изучает основы работы с графикой в .NET«лип?•••••••••••••••••••••••••••Рис.
6.4 т Результат работы программы создания и использования штриховой кистиbegin// Загружаем картинку.image_file:=Image.Fron\File('Gray_Textured.gif');// Создаем текстурную кисть.My_brush:=TextureBrush.Create(image_file);Width:=4*image_file.Width;Height:=3*image_file.Height;// Заполняем все пространство формы текстурой.for i:=0 to 3 dofor j:=0 to 2 do// Рисуем текущий прямоугольник текстурной кистью.е.Graphics.FillRectangle(My_Brush,i*image_file.Width,j * image_file.Height,image_file.Width,image_file.Height);end ;В листинге 6.5 приведен пример использования градиентной кисти. Присоздании кисти методу C r e a t e передаются переменная r e t , задающая размеркисти, две константы Color, задающие два цвета, и параметр, определяющийградиент цвета. Градиент цвета может быть направлен по горизонтали( L i n e a r G r a d i e n t M o d e .
H o r i z o n t a l ) , вертикали (LinearGradientMode.V e r t i c a l ) , от левого верхнего угла к правому нижнему ( L i n e a r G r a d i e n tMode.BackwardDiagonal) или от левого нижнего угла к правому верхнему(LinearGradientMode.ForwardDiagonal).Карандаш и кисть - основные инструменты для рисованияЛистинг 6.5 т Пример созданияи использования градиентной кистиprocedureTWinForml.TWinForml_Paint(s e n d e r : System.Object; e :System. Windows. Forms. PaintEventArgs) ;varMy_Brush:LinearGradientBrush;ret:rectangle;beginret:=rectangle.Create(0,0,30,60) ;/ / Создаем градиентную// кисть.My_Brush:=Рис.
6.5 т Результат использованияLinearGradientBrush.Create(ret,текстурной кистиColor.Red,Color.Orange,LinearGradientMode.Horizontal);/ / Рисуем прямоугольники градиентной кистью// (с различнымградиентом).е.Graphics.FiIIRectangle(My_Brush,30,20,270,50);My_Brush:=LinearGradientBrush.Create(ret,Color.Green,Color.White, L i n e a r G r a d i e n t M o d e . V e r t i c a l ) ;e.Graphics.FillRectangle(My_Brush,30,70,270,50);My_Brush:=LinearGradientBrush.Create(ret,Color.Yellow,Color.Blue,LinearGradientMode.ForwardDiagonal);e.Graphics.FillRectangle(My_Brush,30,120,270,50);end;Результат работы программы можно наблюдать на рис. 6.6.Рис.
6.6 т Результат использования градиентной кисти•ГЛАВА 6 • Изучает основы работы с графикой в .NETИзучаем основныеграфические примитивыЛюбой создаваемый нами рисунок представляет собой совокупность графических примитивов - точек, линий, окружностей, прямоугольников и т.п. Чтобынарисовать подобные примитивы, используются соответствующие методы, некоторые из которых приведены в табл. 6.6.Таблица 6.6 т Методы вычерчивания графических примитивовМетодДействиеDrawLine(Pen,xl,yl,x2,у2)Рисует линию. Параметр Реп определяет цвет,толщину и стиль линии.
Параметры x l , y l , x 2 ,у2 определяют координаты начальной и конечнойточки линииDrawRectangle(Pen,xl,у1,х2,у2)Рисует контур прямоугольника. Параметр Рептакже задает карандаш, а параметры x l , y l , x2,у2 - координаты находящихся на однойдиагонали углов прямоугольникаDrawEllipse(Pen,xl,yl,х2,у2)Рисует контур эллипса. Параметр Реп задаеткарандаш, параметры x l , y l , x2, y2 координаты диагональных углов области, внутрикоторой вычерчивается эллипсDrawArc(Pen,xl,у1,х2,у2,angle_l,angle_2)Рисует контур дуги. Параметр pen задаеткарандаш, параметры x l , y l , x2, y2 координаты диагональных углов области, внутрикоторой вычерчивается эллипс, параметрыa n g l e _ l - начальный угол, angle_2 - длину дугив градусахDrawPie (Pen, xl, у 1, x2, у 2, anglel, angle_2)Рисует контур сектора.
Параметр Реп задаеткарандаш, параметры x l , y l , x2, y2 координаты диагональных углов области, внутрикоторой вычерчивается эллипс, параметрыa n g l e _ l - начальный угол, angle_2 - длину дугиокружности, формирующей сектор, в градусахDrawPolygon(Pen,?_Array)Рисует контур многоугольника. Параметр Penзадает карандаш, а параметр р_Аггау типаP o i n t - массив точек (х, у) - координаты угловмногоугольникаDrawstring Est,Font,Brush,x,у)Выводит строку текста.
Параметр Fontопределяет шрифт текста, Brush - цветсимволов, х и у - координаты точки, от которойбудет выводиться текстDrawlmage(lmage,x,y)Выводит изображение. Параметр imageопределяет выводимое изображение, х и у координаты точки, от которой будетосуществляться выводИзучаем основные графические примитивыТаблица 6.6 т Методы вычерчивания графических примитивов (окончание)МетодДействиеFillRectangle(Brush, x l . y l . x2,y2)Рисует закрашенный прямоугольник. Параметрыидентичны рассмотренным ранее методам,разница состоит в том, что вместо карандашаиспользуется кистьF i l l E l l i p s e ( B r u s h , x l ,yl,x2 ,У2)F i l l Pie(Brush,xl.yl.
x2,y2. a n g l e _ l , a n g 1 e _ 2 )FillPolygon(Brush,xl ,yl,x2 ,У2)Рисует закрашенный эллипсРисует закрашенный секторРисует закрашенный многоугольникНеобходимо заметить, что один и тот же примитив можно нарисовать припомощи разных (хотя и имеющих одинаковые имена) методов. Например,прямоугольник может быть нарисован методом DrawRectangle, которому вкачестве параметров передаются координаты точек, находящихся на однойдиагонали (см. табл. 6.6):е.Graphics.DrawRectangle(Pens.Black,xl,x2,yl,y2);Того же результата можно добиться, если в качестве параметра этому методупередать структуру типа Rectangle, параметры которой задают положениелевого верхнего угла и размер прямоугольника:е.Graphics.DrawRectangle(Pens.Black,My_rect);Существование нескольких методов, по сути выполняющих одну и ту жезадачу, зачастую предоставляет программисту возможность выбора наиболееудобного метода.В качестве параметров методов вычерчивания графических примитивовиспользуются структуры P o i n t и R e c t a n g l e .
Структура Point, которую образуют поля х и у, служит для передачи в метод координат точек плоскости(графической поверхности), структура R e c t a n g l e (ее образуют поля х, у,Width и Height) - для передачи в метод информации о положении и размерепрямоугольной области. В качестве примера использования структур P o i n t иR e c t a n g l e приведу фрагмент программы (листинг 6.6).Листинг 6.6 т Пример использования структур P o i n t и Rectangleprocedure TWinForm.TWinForm_Paint(sender: System.Object;e: System.Windows.Forms.PaintEventArgs);varpi,p2:Point;My_rect:Rectangle;beginpi.X:=100;pl.Y:=10;/ / Точки начала и конца линии./ / Прямоугольная область.// Координаты начальной точки линии.ГЛАВА 6 • Изучаем основы работы с графикой в .NETр2.Х:=200;р2.Y:=30; // Координаты конечной точки линии.е.Graphics.DrawLine(Pens.Blue,pl,p2);// Рисуем линию.// Координаты левого верхнего угла прямоугольника.My_rect.X:= 20;My_rect.Y:=20;My_rect.Width:=60;// Длина прямоугольника.My_rect.Height:=40;// Высота прямоугольника.e.Graphics.DrawRectangle(Pens.Red,My_rect); // Рисуем// прямоугольник.end;Далее подробно разберем методы вычерчивания графических примитивов.ЛинияДля рисования прямой линии используется метод DrawLine (Line в переводес англ.
- линия). В качестве параметров метода используется карандаш, а такжекоординаты точек начала и конца линии:DrawLine(My_Pen,xl,yl,х2,у2);илиDrawLine(My_pen,_pl,_р2);В последнем случае используются структуры _ p l и _р2 типа Point.Например, мы хотим нарисовать линию толщиной в один пиксель из точки(0,0) в точку (100,100). Тогда нарисовать нашу линию можно инструкцией:е.Graphics.Drawline(Pens.Black,0,0,100,100);Также можно воспользоваться вторым методом:_pl.x:=0;_p2.Х:=100;_р1.у:=0;_р2.у:=100;е.Graphics.Drawline(Pens.Black,_pl,_p2);ПрямоугольникПрямоугольник можно начертить методом DrawRectangle (Rectangle в переводе с англ.
- прямоугольник). В качестве параметров этого метода указывается карандаш и координаты двух углов, расположенных на одной диагонали:DrawRectangle(My_Pen,xl,yl,x2,у2);Того же результата можно добиться, использовав структуру Rectangle:DrawRectangle(My_pen,My_Rect);Изучаем основные графические примитивыWПоля х и у структуры R e c t a n g l e содержат координаты левого верхнегоугла прямоугольника, а поля Width и Height - соответственно его длину ивысоту.
Внешний же вид прямоугольника задается параметрами карандаша, вкачестве которого может быть использован стандартный карандаш или же карандаш, созданный программистом.Для рисования закрашенного прямоугольника следует воспользоваться методом F i l l R e c t a n g l e . Параметры этого методы аналогичны предыдущему, основное отличие состоит в том, что в данном случае уже используется инструменткисть, а не карандаш. Соответственно возможно использование как стандартной,так и других типов кисти, рассмотренных нами ранее. Приведенный ниже влистинге 6.7 фрагмент исходного кода демонстрирует использование рассмотренных выше методов DrawRectangle и F i l l R e c t a n g l e .Листинг 6.7 т Использование методов DrawRectangle и F i l l R e c t a n g l eprocedure TWinForm.TWinForm_Paint(sender: System.Object;e: System.Windows.Forms.PaintEventArgs);varMy_rect:rectangle; // Прямоугольная область.beginM y _ r e c t : = R e c t a n g l e .