Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Построение изображений указателем мыши в Microsoft Visual Basic
Приведём пример, в котором демонстрируется рисование указателем мыши на форме, то есть задача состоит в том, чтобы написать программу, позволяющую при нажатой левой или правой кнопке мыши рисовать в форме. Если пользователь отпустит кнопку мыши, то рисование прекращается. В проектируемой форме следует предусмотреть кнопку «Стереть », предназначенную для очистки формы. Вначале необходимо создать форму с командной кнопкой, как мы это делали прежде. Для этого запускаем Visual Basic и в окне Создать проект выбираем шаблон Приложение Windows Form для Visual Basic. Для того чтобы создать кнопку Button, делаем следующее: Вид – Панель элементов – Button(перетащил на форму). Далее переходим в программный код и введем соответствующий текст, представленный ниже: Public Class Form1 Dim Рисовать_ли As Boolean Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.Text = " Рисую мышью в форме" Button1.Text = " Стереть" Рисовать_ли = False ' в начале - не рисовать End Sub Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles MyBase.MouseDown ' Если нажата кнопка мыши - MouseDown, то рисовать Рисовать_ли = True End Sub Private Sub Form1_MouseUp(sender As Object, e As MouseEventArgs) Handles MyBase.MouseUp ' Если кнопку мыши отпустили, то НЕ рисовать Рисовать_ли = False End Sub Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles MyBase.MouseMove ' Рисование прямоугольника, если нажата кнопка мыши If Рисовать_ли = True Then ' Рисовать прямоугольник в точке (e.X, e.Y) Dim Графика = CreateGraphics() Графика.FillRectangle(New SolidBrush(Color.Red), e.X, e.Y, 10, 10) ' 10x10 пикселов - размер сплошного прямоугольника ' e.X, e.Y - координаты указателя мыши Графика.Dispose() ' Эквивалент C++: delete Графика End If End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' Методы очистки формы: Dim Графика = CreateGraphics() Графика.Clear(Me.BackColor) ' Графика.Clear(SystemColors.Control1) ' Графика.Clear(Color.FromName(" Control")) ' Графика.Clear(Color.FromKnownColor(KnownColor.Control)) ' Графика.Clear(ColorTranslator.FromHtml(" #FOFOFO")) ' Me.Refresh() ' Этот метод также перерисовывает форму End Sub End Class В начале программы объявляем переменную Рисовать_ли логического типа (Boolean) со значением False. Эта переменная либо позволяет (Рисовать_ли = True) рисовать в форме при перемещении мыши (событие MouseMove), либо не разрешает делать это (Рисовать_ли = False). Область действия переменной Рисовать_ли – весь класс Form1, т.е. изменить или выяснить ее значение можно в любой процедуре этого класса [9, с.130]. Значение переменной Рисовать_ли может изменить либо событие MouseUp (кнопку мыши отпустили, рисовать нельзя, Рисовать_ли = False), либо событие MouseDown (кнопку мыши нажали, рисовать можно, Рисовать_ли = True). При перемещении мыши с нажатой кнопкой программа создает графический объект Graphics пространства имен System.Drawing, используя метод Create Graphics(), и рисует прямоугольник FillRectangle() размером 10X10 пикселов, заполненный красным цветом. e.X, e.Y – координаты указателя мыши, которые также являются координатами левого верхнего угла прямоугольника. На рисунке 12 Приведен пример рисования в форме. Чтобы стереть все нарисованное в форме, следует нажать кнопку «Стереть». При этом вызывается метод Refresh(), предназначенный для перерисовывания формы.
Рисунок 12 – Окно рисования указателем мыши в форме
В комментариях приведены варианты реализации очистки формы от всего нарисованного на ней пользователем. Например, путем создания графического объекта Create Graphics() и закрашивание формы в ее первоначальный цвет KnownColor. Control [9, с.135]. Можно заметить, что можно было бы очистить область рисования более короткой командой Clear (Color.White), т.е. закрасить форму белым цветом (White), либо выбрать другой цвет из списка 146 цветов после ввода оператора “точка” (.) за словом Color. Однако ни один из 146 цветов не является первоначальным цветом формы (BackColor). Поэтому задаем этот цвет через другие константы цвета, представленные в перечислении Color.FromKnownColor. Также можно задать цвет как Color.FromName (“Control”). Можно использовать функцию перевода 16-ричного кода цвета ColorTranslator.FromHtml(). Оба эти варианта также представлены в комментарии. Цвет #FOFOFO является 16-ричным представлением нужного мне цвета. Очистить форму от всего нарисованного на ней можно нажав на кнопку в форме «Стереть». Рисовать в форме можно как левой, так и правой кнопками мыши[9, с.130].
|