*Задание:Разработайте приложение «Графический редактор», в котором инструменты не будут похожи на инструменты стандартного графического редактора Paint.
Для вывода графического изображения будем использовать саму форму. Первый инструмент, который мы создадим, будет квадрат, т.е. при перемещении указателя мыши на форме под курсором будет рисоваться квадрат.
Для этого необходимо запрограммировать событие MouseMove (перемещение мыши) для формы. Дважды щелкните на форме, чтобы вызвать процедуру описания события Load формы (Загрузка), а затем из списка событий над рабочей областью выберите пункт MouseMove. В коде программы появится описание процедуры:
Private Sub Form1_MouseMove(…) Handles Me.MouseMove
End Sub
Теперь опишем необходимые переменные для создания изображений в VB:
Dim myg As Graphics = CreateGraphics() ' для построения изображенияDim myb AsNew SolidBrush(Color.Red) ' переменная инструмента Кисть красного цвета
Dim myg As Graphics = CreateGraphics() ' для построения изображения
Dim myb As New SolidBrush(Color.Red) ' переменная инструмента Кисть красного цвета
Класс Graphics предоставляет методы для вывода объектов в устройстве отображения. Объект Graphics связан с конкретным контекстом устройства. Используя объект Graphics, можно нарисовать много разных фигур и линий.
SolidBrush – класс, определяющий кисть одного цвета. Кисти используются для заливки графических фигур, таких как прямоугольники, эллипсы, круги, многоугольники и контуры. Этот класс не наследуется.
Для распознания текущего положения курсора будем использовать специальную переменную e, которая уже описана в процедуре MouseMove().
Теперь введем процедуру, рисующую прямоугольник высотой и шириной 10 пикселей, с координатами X и Y курсора мыши. Цвет прямоугольника зависит от значения переменной myb:
myg.FillRectangle(myb, e.X, e.Y, 10, 10)
myg.FillRectangle(myb, e.X, e.Y, 10, 10)
где myb – наша кисть для заливки красного цвета, e.X, e.Y – горизонтальная и вертикальная координаты курсора мыши для задания верхней левой точки прямоугольника, 10, 10 – заполнение области прямоугольника.
Запустите приложение и поводите мышкой по форме. Под курсором рисуется квадрат. Но в данном случае мы не управляем процессом вывода. Необходимо, чтобы мы могли подавать команды для начала и окончания рисования квадрата. Самый удобный способ – это подавать данные команды мышью, к примеру, чтобы квадрат рисовался при нажатой левой клавише мыши.
Для этого в начале модуля формы (после кода Public Class Form1) необходимо описать переменную КнопкаНажата логического типа.
Private КнопкаНажата AsBoolean
Private КнопкаНажата As Boolean
Затем необходимо запрограммировать два события для формы (выбирая их в списке событий формы): когда кнопка мыши опускается вниз (MouseDown), и когда кнопка мыши поднимается вверх (MouseUp):
Private Sub Form1_MouseUp(…) Handles Me.MouseUp
КнопкаНажата = False
End Sub
Теперь осталось в событии перемещения мыши добавить условный оператор, благодаря которому прямоугольники рисуются только в случае, если переменная КнопкаНажата имеет значение True:
If КнопкаНажата Then
myg.FillRectangle(myb, e.X, e.Y, 10, 10)
EndIf
If КнопкаНажата Then
myg.FillRectangle(myb, e.X, e.Y, 10, 10)
End If
Для выполнения дополнительного и контрольных заданий добавим на нашей форме меню, назовем его Инструменты, в котором будут перечисляться созданные графические инструменты. Вызывать тот или иной инструмент можно при помощи переменных, описанных в модуле формы:
Private ИнструментКвадрат As Boolean
Private ИнструментЛиния As Boolean
В событии Click каждого пункта меню добавьте необходимый код. К примеру, для пункта Квадрат:
ИнструментКвадрат = True
ИнструментЛиния = False
ИнструментКвадрат = True
ИнструментЛиния = False
В описание MouseMove следует также добавить дополнительные условия. Для рисования квадрата:
If КнопкаНажата And ИнструментКвадрат = TrueThen
myg.FillRectangle(myb, e.X, e.Y, 10, 10)
EndIf
If КнопкаНажата And ИнструментКвадрат = True Then
myg.FillRectangle(myb, e.X, e.Y, 10, 10)
End If
Контрольное задание:
Добавьте инструмент Эллипс (FillEllipse)
FillEllipse(Brush, Int, Int, Int, Int) — заполняет внутреннюю часть эллипса, определяемого ограничивающим прямоугольником, заданным с помощью пары координат, ширины и высоты.
Если что-либо осталось непонятным, предлагаем просмотреть видео:
Вопросы для самоконтроля:
Когда генерируется событие MouseMove?
Когда генерируется событие MouseDown и MouseUp?
Где следует описывать переменные, область видимости которых распространяется на весь модуль?
* При использовании материалов обязательна ссылка на источник: Майер С.Ф., «MS Visual Basic 2008» — Учебно-методическое пособие : Южный федеральный университет. – Ростов-на-Дону, 2017. – 92 с.