Просто, вам просто нужно обработать события мыши для элемента управления, который содержит ваше изображение. Я проведу вас шаг за шагом, используя производственный код из приложения, которое я написал и которое реализует эту же функцию.
Начните с события MouseDown
. Здесь вам нужно проверить, какая кнопка нажата (если вы хотите разрешить перетаскивание только левой кнопкой, левой и правой кнопками или только правой кнопкой), измените курсор мыши на закрытую или сложенную руку ( указывая, что перетаскивание выполняется), и установите некоторые переменные-члены, которые отслеживают начальные координаты курсора. Пример:
Private Sub picBox_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
' When left mouse button is pressed down (initiating a drag)
If Button = 1 Then
' Store the coordinates of the mouse cursor
xpos = x
ypos = y
' Change the cursor to hand grab icon
picBox.MouseIcon = LoadPicture(App.Path & "\Resources\Cursors\grab.ico")
End If
End Sub
Затем вы обработаете событие MouseMove
, где вы будете выполнять фактическое перетаскивание (перемещение изображения внутри графического блока). В этом примере я решил просто переместить весь элемент управления графическим блоком на форме контейнера, а не перемещать изображение внутри графического блока. Возможно, вам придется изменить логику здесь, в зависимости от макета вашей формы и ваших конкретных потребностей. Например, вы говорите, что у вас есть полосы прокрутки - в этом случае вам необходимо отрегулировать положение полос прокрутки X и Y.
Private Sub picBox_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
' When left mouse button is being held down (drag)
If Button = 1 Then
' Drag the picture box around the form
picBox.Move x + (picBox.Left - xpos), y + (picBox.Top - ypos)
End If
End Sub
И, наконец, вам нужно обработать событие MouseUp
, где вы закончите перетаскивание, сбросив курсор:
Private Sub picBox_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
' Stop normal dragging
If Button = 1 Then
' Set the cursor back to the unclapsed hand
picBox.MouseIcon = LoadPicture(App.Path & "\Resources\Cursors\hand.ico")
End If
End Sub
И, конечно, вам необходимо добавить переменные-члены в начало класса Form, которые отслеживают предыдущую позицию курсора (в координатах x и y). Что-то простое, как это будет делать:
Private xpos As Long
Private ypos As Long
Курсоры выглядели примерно так, подобно тому, что вы найдете в Adobe Acrobat или Mac OS 9 (вероятно, первоначально нарисованные кем-то волшебным, как Сьюзан Каре; возможно, не в открытом доступе):