Шупрута В.В. - Delphi 2005 - Учимся программировать (1080891), страница 39
Текст из файла (страница 39)
S o l i d ) , пунктирной (Dashstyle.Dash), пунктирнойс короткими штрихами (Dashstyle.Dot), пунктирной с чередованиемдлинных и коротких штрихов (Dashstyle.DashDot) и линией, вид которойопределяется свойством DashPattern ( Das hs t y l e .Custom)Свойство определяет длину штрихов линии, если она имеет типDashstyle.CustomDashPatternВажно помнить, что перед тем как использовать свой карандаш, его необходимо создать. Для создания собственного карандаша необходимо воспользоваться методом Create. В качестве параметров этого метода используются константа типа C o l o r (цвет линии) и толщина линии.
По ходу выполненияпрограммы можно менять свойства созданного карандаша, что приведет к изменению вида вычерчиваемых линий. Примеры констант типа Color, определяющих цвет карандаша, приведены в табл. 6.3.Таблица 6.3 т Константы типа C o l o rКонстантаЦветColor.BlackЧерныйColor.WhiteColor.LightGrayColor.YellowColor.OrangeБелыйСерыйЖелтыйОранжевыйColor.RedColor.GreenColor.PurpleColor. LightBlueColor.BlueColor. TransparentКрасныйЗеленыйФиолетовыйГолубойСинийПрозрачныйНиже в листинге 6.2 приведен фрагмент программы (процедура обработкисобытия P a i n t ) , которая демонстрирует создание и использование собствен1ного карандаша .1Для корректной компиляции этого примера укажите в списке включаемых модулей (uses) модуль System.Drawing.Drawing2D. - Прим.
науч. ред. t•ГЛАВА 6 • Изучаем основы работы с графикой в .NETЛистинг 6.2 т Создание и использование собственного карандашаprocedure TWinForm.TWinForm_Paint(sender: System.Object;e: System.Windows.Forms.PaintEventArgs);varMy_Pen : Pen;begin// Создаем карандаш.My_Pen := Pen.Create(Color.Gray,5);// Рисуем квадрат.e.Graphics.DrawRectangle(My_Pen,80,10,50,50);// Изменяем свойства карандаша.My_Pen.Color := Color.Blue;My_Pen.Width := 3;My_Pen.DashStyle := DashStyle.Dot;// Рисуем прямоугольник точками.e.Graphics.DrawRectangle(My_Pen,30,40,80,60);// Изменяем свойства карандаша.My_Pen.Color := Color.Green;My_Pen.Width := 5;My_Pen.DashStyle := DashStyle.Solid;// Рисуем эллипс.• .e.Graphics.DrawEllipse(My_Pen,80,80,100,40);// Изменяем свойства карандаша.My_Pen.Color := Color.Black;\ .My_Pen.Width :=2;My_Pen.DashStyle := DashStyle.Dash;// Рисуем эллипс пунктиром.e.Graphics.DrawEllipse(My_Pen,200,10,80,120);end ;Результат работы программы показан на рис.
6.3.Рис. 6.3 т Рисование с использованием собственного карандашаКарандаш и кисть - основные инструменты для рисованияКистьИнструмент «кисть» используется для закраски внутреннихгеометрических фигур. Например, инструкция следующего видаобластейе.Graphics.FilIRectangle(Brushes.Orange,x,у,_width,„height)рисует закрашенный прямоугольник.В приведенном примере Brushes . Orange - стандартная кисть оранжевогоцвета. Соответственно, параметры х и у определяют положениепрямоугольника на экране, а параметры _width и _ h e i g h t - его размер.Программист может использовать для своих целей четыре типа кистей:>• стандартные.
Стандартная кисть закрашивает область одним цветом, приэтом возможно использование 14 цветов, некоторые из которых приведены в табл. 6.4;>• штриховые. Этот тип кисти (HatchBrush) закрашивает область путемштриховки. Область может быть заштрихована горизонтальными, вертикальными или наклонными линиями.
Некоторые из возможных стилейштриховки приведены в табл. 6.5;> текстурные. Текстурная кисть (TextureBrush) использует для закраскиобласти рисунок, который обычно загружается из файла (bmp, jpg и т.п.).При таком типе закраски область заполняется дублированием рисунка;>• градиентные. Данная кисть (LinearGradientBrush) представляет собойпрямоугольную область, цвет точек в которой зависит от расстояния дограницы. Такие кисти обычно являются двухцветными, то есть цвет точек в них плавно меняется с одного на другой.Таблица 6.4 т Основные кисти из стандартного набораКистьЦветBrushes.BlackЧерныйBrushes.WhiteBrushes.LightGrayБелыйСерыйBrushes.YellowЖелтыйBrushes.OrangeBrushes.RedОранжевыйКрасныйBrushes.GreenЗеленыйBrushes.PurpleФиолетовыйBrushes.LightBlueГолубойBrushes.BlueBrushes.TransparentСинийПрозрачныйГЛАВА 6 Т Изучаем основы работы с графикой в .МЕТТаблица 6.5 т Основные типы штриховки областейСтильШтриховкаHatchstyle.NarrowHorizontalHatchstyle.Hori zontalHatchstyle.
LightHori zontalHatchstyle.NarrowVerticalHatchstyle.VerticalHatchstyle.LightVerticalHatchstyle.LargeGridHatchstyle.SmallGridHatchstyle.DottedGridHatchstyle.PercentO5 Hatchstyle.Percent90Hatchstyle.HorizontalBrickHatchstyle.LargeCheckerBoardHatchstyle•SphereЧастая горизонтальнаяСредняя горизонтальнаяРедкая горизонтальнаяЧастая вертикальнаяВертикальнаяРедкая вертикальнаяКрупная сеткаМелкая сеткаСетка, составленная из точекТочки со степенью заполнения 5-90%Штриховка, напоминающая кирпичную стенкуШтриховка «шахматная доска»Штриховка «пузырьки»Приведем несколько примеров использования кистей. В качестве примераиспользования штриховой кисти приведен листинг 6.3, где демонстрируетсяпроцесс создания и использования штриховой кисти.
Кисть создается методомC r e a t e . В качестве параметра этому методу передается константа H a t c h s t y l e ,задающая тип штриховки, а также две константы типа Color, задающие цвет фонаи штрихов соответственно. Результат работы программы приведен на рис. 6.4.Листинг 6.3 т Пример создания и использования штриховой кистиunitWinForm;interfaceusesSystem.Drawing, System.Collections, System.ComponentModel,System.Windows.Forms, System.Data,System.Drawing.Drawing2D;typeTWinForm = class(System.Windows.Forms.Form){$REGION'Designer Managed Code 1 }strict privateComponents:procedureSystem.ComponentModel.Container;InitializeComponent;procedure TWinForm_Paint(sender: System.Object;e:System.Windows.Forms.PaintEventArgs){$ENDREGION}strict protectedprocedure Dispose(Disposing: Boolean);. override;Карандаш и кисть - основные инструменты для рисования•procedure Draw(g: Graphics; var r : Rectangle;aHatchStyle: System.Drawing.Drawing2D.HatchStyle);publicconstructor Create;end;implementationusesSystem.Globalization;{$REGION 'Windows Form Designer generated code'}varrec:Rectangle;My_HatchBrush: HatchBrush;procedure TWinForm.Dispose(Disposing: Boolean);beginif Disposing thenbeginif Components <> nil thenComponents.Dispose();end;inherited Dispose(Disposing);end;constructor TWinForm.Create; .begininherited Create;InitializeComponent;rec.X := 0;rec.Y := 0;rec.Width := 80;rec.Height :=40;Width := rec.Width *8 + 7;My_HatchBrush:=nil;end;procedure TWinForm.TWinForm_Paint(sender: System.Object;e: System.Windows.Forms.PaintEventArgs);begintec.X := 0;rec.Y := 0;// Отображаем возможные штриховки// (последовательно вызываем процедуру отображения текущей// штриховки Draw).Draw(е.Graphics,rec,HatchStyle.BackwardDiagonal);Draw(e.Graphics,rec,HatchStyle.Cross);ГЛАВА 6 • Изучаем основы работы с графикой в .МЕТDraw(е.Graphics,rec,HatchStyle.
DarkDownwardDiagonal);Draw(e.Graphics,rec,HatchStyle.DarkHorizontal);Draw(e.Graphics,rec,HatchStyle.DarkUpwardDiagonal);Draw(e.Graphics,rec,HatchStyle..DarkVertical);Draw(e.Graphics,rec,HatchStyle..DashedDownwardDiagonal) ;Draw(e.Graphics,rec,HatchStyle..DashedHorizontal);Draw{e.Graphics,rec,HatchStyle.. DashedUpwardDiagonal);Draw(e.Graphics,rec,HatchStyle..DashedVertical) ;Draw(e.Graphics,rec,HatchStyle.• DiagonalBrick) ;Draw(e.Graphics,rec,HatchStyle..DiagonalCross) ;Draw(e.Graphics,rec,HatchStyle..Divot);Draw(e.Graphics,rec,HatchStyle..DottedDiamond);Draw(e.Graphics,rec,HatchStyle..DottedGrid) ;Draw (e.
Graphics, rec, HatchStyle'..ForwardDiagonal);Draw(e.Graphics,rec,HatchStyle..Horizontal);Draw(e.Graphics,rec,HatchStyle..HorizontalBrick);Draw(e.Graphics,rec,HatchStyle..LargeCheckerBoard);Draw(e.Graphics,rec,HatchStyle..LargeConfetti);Draw(e.Graphics,rec,HatchStyle..LargeGrid);Draw(e.Graphics,rec,HatchStyle..LightDownwardDiagonal);Draw(e.Graphics,rec,HatchStyle..LightHorizontal);Draw(e.Graphics,rec,HatchStyle..LightUpwardDiagonal);Draw(e.Graphics,rec,HatchStyle..LightVertical);Draw(e.Graphics,rec,HatchStyle..Max);Draw(e.Graphics,rec,HatchStyle..Min);Draw(e.Graphics,rec,HatchStyle..NarrowHorizontal);Draw(e.Graphics,rec,HatchStyle .NarrowVertical);Draw f e.Graphics,rec,HatchStyle.OutlinedDiamond);Draw(e.Graphics,rec,HatchStyle .PercentO5)Draw(e.Graphics,rec,HatchStyle .PercentlO)Draw(e.Graphics,rec,HatchStyle .Percent20)Draw(e.Graphics,rec,HatchStyle .Percent25)Draw(e.Graphics,rec,HatchStyle .Percent3 0)Draw(e.Graphics,rec,HatchStyle .Percent40)Draw(e.Graphics,rec,HatchStyle .Percent50)Draw(e.Graphics,rec,HatchStyle .Percent60)Draw(e.Graphics,rec,HatchStyle .Percent70)Draw(e.Graphics,rec,HatchStyle .Percent75)Draw(e.Graphics,rec,HatchStyle .Percent80)Draw(e.Graphics,rec,HatchStyle .Percent90),Draw(e.Graphics,rec,HatchStyle .Plaid);Draw(e.Graphics,rec,HatchStyle .Shingle);Draw(e.Graphics,rec,HatchStyle .SmallCheckerBoard)Draw(e.Graphics,rec,HatchStyle .SmallConfetti);Карандаш и кисть - основные инструменты для рисованияDraw(e.Graphics,rec,HatchStyle.SmallGrid);Draw(e.Graphics,rec,HatchStyle.SolidDiamond);Draw(e.Graphics, recHatchStyle.Sphere);Drawfe.Graphics,rec,Hatchstyle.Trellis);Draw(e.Graphics,rec,HatchStyle.Vertical);Draw(e.Graphics,rec,HatchStyle.Wave);Draw(e.Graphics , recHatchStyle.
Weave) ;Draw(e.Graphics,rec,HatchStyle.WideDownwardDiagonal);Draw(e.Graphics,rec,HatchStyle.WideUpwardDiagonal);Drawfe.Graphics,rec,HatchStyle.ZigZag);end ;// Процедура рисования текущей области со штриховкой.procedure TWinForm.Drawtg: Graphics; var r: Rectangle;aHatchStyle: HatchStyle);beginif assigned(My_HatchBrush) then My_HatchBrush.Free;My_HatchBrush := HatchBrush.Create(aHatchStyle,Color.Black,Color.White);// Заполнение области штриховкой.g.FillRectangle(My_HatchBrush,r);// Рисование разделительного прямоугольника (для наглядности).g.DrawRectangle(Pens.Black,r);// Определяем координаты.г.Х := г.Х + г.Width;if r.x >= self .ClientSize.Width -6 thenbeginr.X := 0;r.Y := r.Y+ r.Height;end ;end;end.В листинге 6.4 приведен пример использования текстурной кисти.