Поделитесь нормальным UpDown с поддержкой колеса - VB

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

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

Мало того что стандартный из VB6 не поддерживает общий стиль винды, когда стрелочки внутри а не снаружи, так еще и колесо не поддерживает. Может есть у кого нормальный?

Решение задачи: «Поделитесь нормальным UpDown с поддержкой колеса»

textual
Листинг программы
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Const GWL_WNDPROC = (-4)
Public lpPrevWndProc As Long
Const WM_MOUSEWHEEL = &H20A
Const WHEEL_DELTA = 120
Dim Count As Integer
 
Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If Msg = WM_MOUSEWHEEL Then
        Dim Delta As Long
        Static Travel As Long
        Delta = HiWord(wParam)
        Travel = Travel + Delta
        MouseWheel Travel  WHEEL_DELTA, LoWord(lParam), HiWord(lParam)
        Travel = Travel Mod WHEEL_DELTA
    End If
    WndProc = CallWindowProc(lpPrevWndProc, hWnd, Msg, wParam, lParam)
End Function
 
Sub MouseWheel(Travel As Integer, X As Long, Y As Long)
 
     If Form1.ActiveControl.Name = Form1.UpDown1.Name Then
        Select Case True
            Case Travel < 0
                If Form1.UpDown1.Value - 1 >= Form1.UpDown1.Min Then
                    Form1.UpDown1.Value = Form1.UpDown1.Value - 1
                End If
            Case Else
                If Form1.UpDown1.Value + 1 <= Form1.UpDown1.Max Then
                    Form1.UpDown1.Value = Form1.UpDown1.Value + 1
                End If
        End Select
    End If
 
End Sub
 
Function HiWord(DWord As Long) As Integer
    CopyMemory HiWord, ByVal VarPtr(DWord) + 2, 2
End Function
 
Function LoWord(DWord As Long) As Integer
    CopyMemory LoWord, DWord, 2
End Function

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


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

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

8   голосов , оценка 4 из 5
Похожие ответы