Как разграничить события нажатия и "перетаскивания" (нажатие и удержание)? - VB
Формулировка задачи:
Здравствуйте !
Возьмем к примеру, CommandButton.
Хочу уметь перетаскивать форму, удерживая курсор мыши на кнопке.
Следовательно обычный клик (_Click (Mouse_Down + Mouse_Up) также должен нормально отрабатывать.
Сейчас конфликтный код имеет такой вид:
Листинг программы
- Option Explicit
- Private Declare Function SendMessage Lib "user32" Alias "SendMessageW" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
- Private Declare Sub ReleaseCapture Lib "user32" ()
- Private Const WM_NCLBUTTONDOWN As Long = &HA1&
- Private Const HTCAPTION As Long = 2&
- Private Sub Command1_Click()
- MsgBox "Обычный клик по кнопке"
- End Sub
- Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
- Call MoveForm(Button)
- End Sub
- Function MoveForm(Button As Integer) As Long
- If Button = 1 Then
- Call ReleaseCapture
- MoveForm = SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
- End If
- End Function
Решение задачи: «Как разграничить события нажатия и "перетаскивания" (нажатие и удержание)?»
textual
Листинг программы
- Option Explicit
- Dim dX As Single, dy As Single, flag As Boolean
- Private Sub cmdCommand1_Click()
- Debug.Print "Click"
- End Sub
- Private Sub cmdCommand1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
- Debug.Print "Mouse down"
- flag = True: dX = X: dy = Y
- End Sub
- Private Sub cmdCommand1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
- If flag Then Me.Move Me.Left + (X - dX), Me.Top + (Y - dy)
- End Sub
- Private Sub cmdCommand1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
- flag = False
- Debug.Print "Mouse up"
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д