Программирование
Веб программирование

Выделение области в графическом редакторе

 
 

Неотъемлемым инструментом любого графического редактора является выделение области рисунка.  Рассмотрим, как можно сформировать выделение области на форме и переместить это выделение.

  1. Создадим новый проект Vb.Net.
  2. Размер формы может быть любой. Поместим на форму из панели инструментов 4 контрола PictureBox1,  PictureBox2,  PictureBox3,  PictureBox4. Размеры и другие свойства этих PictureBox-ов пока могут быть любые, далее они будут сформированы программно.
  3. Дважды щелкаем мышкой на форме и попадаем в редактор кода с заготовкой процедуры загрузки формы.

Нам еще потребуются заготовки процедур событий Form1_MouseDown, Form1_MouseUp и Form1_MouseMove. Все они легко получаются выбором в правом верхнем окне редактора, там где находится список возможных событий.

 

  1. Дальше ручками записываем код.  Запускаем проект и смотрим.

 

Если у кого возникнут вопросы, охотно отвечу. 

Public Class Form1

Dim pc(4) As PictureBox Dim i, j, k, io, jo, ireg As Integer

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Me.Height = 700 'Высота формы

Me.Width = 1000 'Длина формы

Me.StartPosition = FormStartPosition.CenterScreen 'Форма в центре экрана

pc(1) = PictureBox1

pc(2) = PictureBox2

pc(3) = PictureBox3

pc(4) = PictureBox4

ireg = 0 'Переменная выбора режима прорисовка/перемещение выделения

For Me.i = 1 To 4

pc(i).Visible = False

pc(i).Width = 1 'Все стороны выделения в точку

pc(i).Height = 1 pc(i).BackColor = Color.Blue 'Задание цвета контура выделения

Next End Sub

Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown

'Левая кнопка мышки нажата

If e.Button = MouseButtons.Left Then

io = e.X 'Стартовые координата прорисовки

jo = e.Y

k = 1

End If

'Правая кнопка мышки нажата

If e.Button = MouseButtons.Right Then

'Стирание прорисовки выделения

For Me.i = 1 To 4

pc(i).Visible = False

pc(i).Width = 1

pc(i).Height = 1

Next

ireg = 0

Cursor.Current = Cursors.Arrow

'Курсор обычная стрелка

End If

End Sub

Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove

'Вывод координат курсора в заголовок формы

Form1.ActiveForm.Text = e.X & " X " & e.Y i = e.X j = e.Y

'Прорисовка области выделения

If k = 1 And ireg = 0 Then

pc(1).Width = Math.Abs(i - io)

pc(1).Top = jo

pc(2).Width = pc(1).Width

pc(3).Height = Math.Abs(j - jo)

pc(2).Top = jo + pc(3).Height

pc(3).Top = pc(1).Top

pc(1).Left = io

pc(2).Left = pc(1).Left

pc(3).Left = pc(1).Left

pc(4).Left = pc(1).Left + pc(1).Width

pc(4).Top = pc(1).Top

pc(4).Height = pc(3).Height

For Me.i = 1 To 4

pc(i).Visible = True

Next

End If

'Перемещение области выделения

If k = 1 And ireg = 1 Then

pc(1).Top = j - 0.5 * pc(3).Height

pc(1).Left = i - 0.5 * pc(1).Width

pc(2).Left = pc(1).Left

pc(2).Top = pc(1).Top + pc(4).Height

pc(3).Left = pc(1).Left

pc(4).Left = pc(1).Left + pc(1).Width

pc(3).Top = pc(1).Top

pc(4).Top = pc(1).Top

Cursor.Current = Cursors.SizeAll

End If

'Если курсор в выделенной области, то отображается стрелка-крест

If k = 0 Then

If i > pc(1).Left And i < pc(1).Left + pc(1).Width And j > pc(1).Top And j < pc(1).Top + pc(3).Height Then

Cursor.Current = Cursors.SizeAll

ireg = 1 'режим перемещения выделения

End If

End If

End Sub

Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp

k = 0

End Sub

End Class


Есть вопросы? Спроси на нашем форуме!!
Нет комментариев

Оставлять комментарии можно только зарегистрированным




Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.