VB 16. Обработка событий мыши

* Задание: Разработайте приложение «Графический редактор», в котором инструменты не будут похожи на инструменты стандартного графического редактора Paint.

Выполнение:
visual basic работа с мышью

  1. Для вывода графического изображения будем использовать саму форму. Первый инструмент, который мы создадим, будет квадрат, т.е. при перемещении указателя мыши на форме под курсором будет рисоваться квадрат.
  2. Для этого необходимо запрограммировать событие MouseMove (перемещение мыши) для формы. Дважды щелкните на форме, чтобы вызвать процедуру описания события Load формы (Загрузка), а затем из списка событий над рабочей областью выберите пункт MouseMove. В коде программы появится описание процедуры:
Private Sub Form1_MouseMove(…) Handles Me.MouseMove
 
End Sub
  1. Теперь опишем необходимые переменные для создания изображений в VB:
Dim myg As Graphics = CreateGraphics() ' для построения изображения
Dim myb As New SolidBrush(Color.Red) ' переменная инструмента Кисть красного цвета

Класс Graphics предоставляет методы для вывода объектов в устройстве отображения. Объект Graphics связан с конкретным контекстом устройства. Используя объект Graphics, можно нарисовать много разных фигур и линий.

SolidBrush – класс, определяющий кисть одного цвета. Кисти используются для заливки графических фигур, таких как прямоугольники, эллипсы, круги, многоугольники и контуры. Этот класс не наследуется.

  1. Для распознания текущего положения курсора будем использовать специальную переменную e, которая уже описана в процедуре MouseMove ().
  2. Теперь введем процедуру, рисующую прямоугольник высотой и шириной 10 пикселей, с координатами X и Y курсора мыши. Цвет прямоугольника зависит от значения переменной myb:
myg.FillRectangle(myb, e.X, e.Y, 10, 10)

где myb – наша кисть для заливки красного цвета, e.X, e.Y – горизонтальная и вертикальная координаты курсора мыши для задания верхней левой точки прямоугольника, 10, 10 – заполнение области прямоугольника.

  1. Запустите приложение и поводите мышкой по форме. Под курсором рисуется квадрат. Но в данном случае мы не управляем процессом вывода. Необходимо, чтобы мы могли подавать команды для начала и окончания рисования квадрата. Самый удобный способ – это подавать данные команды мышью, к примеру, чтобы квадрат рисовался при нажатой левой клавише мыши.
  2. Для этого в начале модуля формы (после кода Public Class Form1) необходимо описать переменную КнопкаНажата логического типа.
Private КнопкаНажата As Boolean
  1. Затем необходимо запрограммировать два события для формы (выбирая их в списке событий формы): когда кнопка мыши опускается вниз (MouseDown), и когда кнопка мыши поднимается вверх (MouseUp):
Private Sub Form1_MouseDown(…) Handles Me.MouseDown
 КнопкаНажата = True
End Sub
Private Sub Form1_MouseUp(…) Handles Me.MouseUp
 КнопкаНажата = False
End Sub
  1. Теперь осталось в событии перемещения мыши добавить условный оператор, благодаря которому прямоугольники рисуются только в случае, если переменная КнопкаНажата имеет значение True:
If КнопкаНажата Then
 myg.FillRectangle(myb, e.X, e.Y, 10, 10)
End If
  • Для выполнения дополнительного и контрольных заданий добавим на нашей форме меню, назовем его Инструменты, в котором будут перечисляться созданные графические инструменты. Вызывать тот или иной инструмент можно при помощи переменных, описанных в модуле формы:
Private ИнструментКвадрат  As Boolean
Private ИнструментЛиния As Boolean
  1. В событии Click каждого пункта меню добавьте необходимый код. К примеру, для пункта Квадрат:
ИнструментКвадрат = True
ИнструментЛиния = False
  1. В описание MouseMove следует также добавить дополнительные условия. Для рисования квадрата:
If КнопкаНажата And ИнструментКвадрат = True Then
 myg.FillRectangle(myb, e.X, e.Y, 10, 10)
End If
Контрольное задание:

  1. Добавьте инструмент Эллипс (FillEllipse)

FillEllipse(Brush, Int, Int, Int, Int) — заполняет внутреннюю часть эллипса, определяемого ограничивающим прямоугольником, заданным с помощью пары координат, ширины и высоты.

  1. Добавьте инструмент Линия (Dim myp As New Pen(Color.Blue), myg.DrawLine(myp, е.X, е.Y, 100, 100))
  2. Добавьте в меню пункт Цвет для выбора цвета.

Если что-либо осталось непонятным, предлагаем просмотреть видео:
youTube

Вопросы для самоконтроля:

  1. Когда генерируется событие MouseMove?
  2. Когда генерируется событие MouseDown и MouseUp?
  3. Где следует описывать переменные, область видимости которых распространяется на весь модуль?

* При использовании материалов обязательна ссылка на источник: Майер С.Ф., «MS Visual Basic 2008» — Учебно-методическое пособие : Южный федеральный университет. – Ростов-на-Дону, 2017. – 92 с.