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