' Объявляем пару функций API и пару констант(Это должно быть в модуле)
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Sub ReleaseCapture Lib "user32" ()
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HTCAPTION = 2
' а это уже процедура перемещения указателя над элементом Text1(т.е. это уже код формы)
Private Sub Text1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lngReturnValue As Long
If Button = 1 Then
Call ReleaseCapture
lngReturnValue = SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
End If
End Sub
RayShade писал(а):Никак не пойму. Отчего, у меня дергается левый глаз, а?
Ничего подробного ни в поиске, ни в ApiViewer'e не нашёл.
Option Explicit
Dim Mouse_Lock As Boolean
Dim cx As Integer, cy As Integer
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
Mouse_Lock = True ' Если нажата кнопка мыши, то начинаем двигать
cx = X ' Записываем, где курсор относительно формы
cy = Y
End If
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Mouse_Lock Then ' Если мышь опущена на форму, то двигаем форму
DoEvents
Me.Top = Me.Top + Y - cy
Me.Left = Me.Left + X - cx
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Mouse_Lock = False ' Соответственно, если мышь отпустить, то форма освобождается
End Sub
Это называется проще? Мало того, что с твоим кодом форма дергается, как припадошная, так еще и при даблклике событие MouseDown "проглатывается", т.е. если по твоей форме кликнуть быстро два раза и после второго клика мышку не отпускать, то никуда она не поедет. Хотя конечно это несмертельно...IIIypuk писал(а):Люди, будьте проще
vvs_adm писал(а):...Это называется проще? Мало того, чт.....
Option Explicit
Dim Mouse_Lock As Boolean
Dim cx As Integer, cy As Integer
Dim temp As Boolean
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
Mouse_Lock = True ' Если нажата кнопка мыши, то начинаем двигать
cx = X ' Записываем, где курсор относительно формы
cy = Y
End If
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If temp Then Exit Sub
temp = True
If Mouse_Lock Then ' Если мышь опущена на форму, то двигаем форму
DoEvents
Me.Top = Me.Top + Y - cy
Me.Left = Me.Left + X - cx
End If
temp = False
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Mouse_Lock = False ' Соответственно, если мышь отпустить, то форма освобождается
End Sub
Option Explicit
Dim cx As Single, cy As Single
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
cx = X
cy = Y
End If
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
Top = Top + Y - cy
Left = Left + X - cx
End If
End Sub
Хакер писал(а):Я опять, с грустью, где-то там, в сердце, наблюдаю MouseMove-ное перетаскивание безо всякого предусмотрения рекурсивного вызова события. И это уже который раз (помните за что мне дали звание?)
Сейчас этот форум просматривают: AhrefsBot, SemrushBot, Yandex-бот и гости: 23