Как разграничить события нажатия и "перетаскивания" (нажатие и удержание)? - VB

Узнай цену своей работы

Формулировка задачи:

Здравствуйте ! Возьмем к примеру, CommandButton. Хочу уметь перетаскивать форму, удерживая курсор мыши на кнопке. Следовательно обычный клик (_Click (Mouse_Down + Mouse_Up) также должен нормально отрабатывать. Сейчас конфликтный код имеет такой вид:
Листинг программы
  1. Option Explicit
  2. 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
  3. Private Declare Sub ReleaseCapture Lib "user32" ()
  4. Private Const WM_NCLBUTTONDOWN As Long = &HA1&
  5. Private Const HTCAPTION As Long = 2&
  6. Private Sub Command1_Click()
  7. MsgBox "Обычный клик по кнопке"
  8. End Sub
  9. Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  10. Call MoveForm(Button)
  11. End Sub
  12. Function MoveForm(Button As Integer) As Long
  13. If Button = 1 Then
  14. Call ReleaseCapture
  15. MoveForm = SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
  16. End If
  17. End Function

Решение задачи: «Как разграничить события нажатия и "перетаскивания" (нажатие и удержание)?»

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Dim dX As Single, dy As Single, flag As Boolean
  4.  
  5. Private Sub cmdCommand1_Click()
  6.     Debug.Print "Click"
  7. End Sub
  8.  
  9. Private Sub cmdCommand1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  10.     Debug.Print "Mouse down"
  11.     flag = True: dX = X: dy = Y
  12. End Sub
  13.  
  14. Private Sub cmdCommand1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  15.     If flag Then Me.Move Me.Left + (X - dX), Me.Top + (Y - dy)
  16. End Sub
  17.  
  18. Private Sub cmdCommand1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  19.     flag = False
  20.     Debug.Print "Mouse up"
  21. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы