Создаем собственные перья. Конструктор
Создаем перо. До этого момента для рисования линий мы пользовались стандартными перьями из класса Pens. Там можно было выбирать цвет пера и больше ничего. Мы же хотим управлять также толщиной, стилем и другими свойствами линий. Для этого существует специальный класс Pen, входящий в пространство имен System.Drawing (не путать с классом Pens). Но пользоваться им напрямую нельзя. Нам нужно сначала создать из класса Pen объекты-перья подобно тому, как из класса Button в 6.1.2 мы создавали объекты-кнопки.
Конструктор. В классах для создания из них экземпляров-объектов существует специальная процедура с именем New. Называется она конструктором. Вы можете объявить и создать объект тремя способами записи. Самый длинный:
Dim Перо As Pen 'Объявляем объект
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Перо = New Pen(Color.Red, 20) 'Создаем объект
End Sub
При создании пера при помощи слова New необходимо в скобках указывать параметры. Я выбрал вариант с указанием двух параметров: цвета пера и толщины. В приведенном фрагменте создано красное перо толщины 20.
Откуда мы знаем, какие нужно указывать параметры, и нужно ли их указывать вообще? Об этом вам скажет подсказка по параметрам, которая возникнет, как только вы откроете скобку после слова Pen. Вы выберете вариант по вкусу и укажете параметры.
О процедуре New и вариантах ее параметров вы можете также узнать при помощи клавиши F1 или Object Browser.
Как видите, обращение к конструктору грамматически несколько отличается от общепринятого обращения к процедуре.
В приведенном варианте при запуске проекта объект только объявляется, а создается позже, когда мы нажмем на кнопку. Этот способ хорош тогда, когда вы хотите по ходу работы проекта то создавать, то уничтожать объект.
Вот способ покороче:
Dim Перо As Pen = New Pen(Color.Red, 20) 'Объявляем и создаем объект
Здесь объект и объявляется, и создается одновременно.
Рис. 12.3
Для этого создайте проект с тремя кнопками и меткой и введите следующую программу:
Dim Граф_формы, Граф_метки As Graphics
Dim Перо1, Перо2 As Pen
'Создаем графические объекты и перья:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Граф_формы = Me.CreateGraphics
Граф_метки = Label1.CreateGraphics
'Создаем перо 1:
Перо1 = New Pen(Color.Blue, 10)
Перо1.DashStyle = Drawing.Drawing2D.DashStyle.Dash
'Создаем перо 2:
Перо2 = New Pen(Color.Red, 20)
Перо2.StartCap = Drawing.Drawing2D.LineCap.RoundAnchor
Перо2.EndCap = Drawing.Drawing2D.LineCap.ArrowAnchor
End Sub
'Рисуем пером 1:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Граф_формы.DrawEllipse(Перо1, 100, 50, 200, 100) 'Рисуем пером 1 эллипс на форме
Граф_метки.DrawPie(Перо1, 10, 10, 150, 150, 0, 270) 'Рисуем пером 1 сектор на метке
End Sub
'Рисуем пером 2:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Граф_формы.DrawLine(Перо2, 50, 50, 330, 150) 'Рисуем пером 2 стрелку на форме
Граф_метки.DrawRectangle(Перо2, 50, 50, 70, 100) 'Рисуем пером 2 прямоугольник на метке
End Sub
Пояснения. Здесь мы объявили оба пера вне процедур, чтобы ими можно было пользоваться из каждой процедуры.
При создании пера 1 мы задали его свойство DashStyle (стиль штриховки). Как только в окне кода в операторе
Перо1.DashStyle = Drawing.Drawing2D.DashStyle.Dash
вы введете с клавиатуры знак равенства, перед вами развернется список возможных стилей штриховки (Рис. 12.4), из которых вы можете выбирать.
Рис. 12.4
Вот их узоры:
Custom |
Определяется программистом |
Dash |
- - - - - - - - |
DashDot |
- . - . - . - . |
DashDotDot |
- . . - . . - . . - . . |
Dot |
. . . . . . . . |
Solid |
________ |
Каждый из стилей является одним из 6 значений перечисления DashStyle, входящего в пространство имен Drawing.Drawing2D. Мы выбрали штриховку Dash и таким штрихованным пером начертили эллипс и сектор.
При создании пера 2 мы задали его свойства StartCap («Колпак» на начало линии) и EndCap («Колпак» на конец линии). Процесс их выбора аналогичен процессу выбора свойства DashStyle. В качестве колпаков может выступить стрелка (ArrowAnchor), кружок (RoundAnchor) и ряд других фигур и очертаний. Эти фигуры и очертания являются значениями перечисления LineCap, входящего в пространство имен Drawing.Drawing2D. Пером 2 мы начертили стрелку и прямоугольник. Обратите внимание, что прямоугольник получился без «колпаков». Наверное потому, что у линии прямоугольника нет ни начала, ни конца.
У пера есть и другие любопытные свойства, но объем книги не позволяет мне на них останавливаться. Если вам интересно, найдите в Object Browser список свойств класса Pen. Выделите интересующее вас свойство и нажмите клавишу F1. Если вы знаете английский, то попробуйте разобраться в возникшем окне помощи. Правда, разобраться как следует даже при знании английского начинающему будет трудновато.