نمایش نتایج: از شماره 1 تا 1 , از مجموع 1

موضوع: آموزش فعال کردن پیمایش ماوس در UserForm ListBox & ComboBox

  1. #1


    آخرین بازدید
    3 هفته پیش
    تاریخ عضویت
    March 2017
    محل سکونت
    قزوین
    نوشته ها
    555
    امتیاز
    518
    سپاس
    182
    سپاس شده
    449 در 216 پست
    سطح اکسل
    41.00 %

    Flag آموزش فعال کردن پیمایش ماوس در UserForm ListBox & ComboBox

    سلام،
    امیدوارم این آموزش به کار دوستان گلم بیاد

    چگونه می توانم پیمایش ماوس را در
    ListBox در داخل یک User Form فعال کنم
    برای این کار یک ماژول با نام ScrolWheel ایجاد کنیدو کد زیر را درون آن قرار میدهیم

    کد PHP:
    '''''' normal module code

    Option Explicit

    Private Type POINTAPI
            X 
    As Long
            Y 
    As Long
    End Type

    Private Type MOUSEHOOKSTRUCT
            pt 
    As POINTAPI
            hwnd 
    As Long
            wHitTestCode 
    As Long
            dwExtraInfo 
    As Long
    End Type

    Private Declare Function FindWindow Lib "user32" _
                                            Alias 
    "FindWindowA" _
                                                            ByVal lpClassName 
    As String_
                                                            ByVal lpWindowName 
    As String) As Long

    Private Declare Function GetWindowLong Lib "user32.dll" _
                                            Alias 
    "GetWindowLongA" _
                                                            ByVal hwnd 
    As Long_
                                                            ByVal nIndex 
    As Long) As Long

    Private Declare Function SetWindowsHookEx Lib "user32" _
                                            Alias 
    "SetWindowsHookExA" _
                                                            ByVal idHook 
    As Long_
                                                            ByVal lpfn 
    As Long_
                                                            ByVal hmod 
    As Long_
                                                            ByVal dwThreadId 
    As Long) As Long

    Private Declare Function CallNextHookEx Lib "user32" _
                                                            ByVal hHook 
    As Long_
                                                            ByVal nCode 
    As Long_
                                                            ByVal wParam 
    As Long_
                                                            lParam 
    As Any) As Long

    Private Declare Function UnhookWindowsHookEx Lib "user32" _
                                                            ByVal hHook 
    As Long) As Long

    'Private Declare Function PostMessage Lib "user32.dll" _
    '                                         
    Alias "PostMessageA" _
    '                                                         ByVal hwnd As Long, _
    '                                                         
    ByVal wMsg As Long_
    '                                                         ByVal wParam As Long, _
    '                                                         
    ByVal lParam As Long) As Long

    Private Declare Function WindowFromPoint Lib "user32" _
                                                            ByVal xPoint 
    As Long_
                                                            ByVal yPoint 
    As Long) As Long

    Private Declare Function GetCursorPos Lib "user32.dll" _
                                                            ByRef lpPoint 
    As POINTAPI) As Long

    Private Const WH_MOUSE_LL As Long 14
    Private Const WM_MOUSEWHEEL As Long = &H20A
    Private Const HC_ACTION As Long 0
    Private Const GWL_HINSTANCE As Long = (-6)

    'Private Const WM_KEYDOWN As Long = &H100
    '
    Private Const WM_KEYUP As Long = &H101
    'Private Const VK_UP As Long = &H26
    '
    Private Const VK_DOWN As Long = &H28
    'Private Const WM_LBUTTONDOWN As Long = &H201

    Private mLngMouseHook As Long
    Private mListBoxHwnd As Long
    Private mbHook As Boolean
    Private mCtl As MSForms.Control
    Dim n As Long

    Sub HookListBoxScroll(frm As Object, ctl As MSForms.Control)
    Dim lngAppInst As Long
    Dim hwndUnderCursor As Long
    Dim tPT As POINTAPI
         GetCursorPos tPT
         hwndUnderCursor = WindowFromPoint(tPT.X, tPT.Y)
         If Not frm.ActiveControl Is ctl Then
                 ctl.SetFocus
         End If
         If mListBoxHwnd <> hwndUnderCursor Then
                 UnhookListBoxScroll
                 Set mCtl = ctl
                 mListBoxHwnd = hwndUnderCursor
                 lngAppInst = GetWindowLong(mListBoxHwnd, GWL_HINSTANCE)
                 ' 
    PostMessage mListBoxHwndWM_LBUTTONDOWN0&, 0&
                 If 
    Not mbHook Then
                         mLngMouseHook 
    SetWindowsHookEx_
                                                         WH_MOUSE_LL
    AddressOf MouseProclngAppInst0)
                         
    mbHook mLngMouseHook <> 0
                 End 
    If
         
    End If
    End Sub

    Sub UnhookListBoxScroll
    ()
         If 
    mbHook Then
                    Set mCtl 
    Nothing
                 UnhookWindowsHookEx mLngMouseHook
                 mLngMouseHook 
    0
                 mListBoxHwnd 
    0
                 mbHook 
    False
            End 
    If
    End Sub

    Private Function MouseProc_
                 ByVal nCode 
    As LongByVal wParam As Long_
                 ByRef lParam 
    As MOUSEHOOKSTRUCT) As Long
    Dim idx 
    As Long
            On Error 
    GoTo errH
         
    If (nCode HC_ACTIONThen
                 
    If WindowFromPoint(lParam.pt.XlParam.pt.Y) = mListBoxHwnd Then
                         
    If wParam WM_MOUSEWHEEL Then
                                    MouseProc 
    True
    '                                If lParam.hwnd > 0 Then
    '                                        
    PostMessage mListBoxHwndWM_KEYDOWNVK_UP0
    '                                Else
    '                                        
    PostMessage mListBoxHwndWM_KEYDOWNVK_DOWN0
    '                                End If
    '                                
    PostMessage mListBoxHwndWM_KEYUPVK_UP0
                                    
    If lParam.hwnd 0 Then idx = -Else idx 1
    ' اگر در اينجا از اين کد استفاده کنيم با چرخاندن قلتک ماوس مورد هايلات شد ثابت ميماند
                                 idx = idx + mCtl.TopIndex
                                 If idx >= 0 Then mCtl.TopIndex = idx
    اگر در اينجا از اين کد استفاده کنيم با چرخاندن قلتک ماوس مورد هايلات جابجا ميشود
    '                             idx = idx + mCtl.ListIndex
    '                             
    If idx >= 0 Then mCtl.ListIndex idx
                                    
    Exit Function
                         
    End If
                 Else
                         
    UnhookListBoxScroll
                 End 
    If
         
    End If
         
    MouseProc CallNextHookEx_
                                 mLngMouseHook
    nCodewParamByVal lParam)
         Exit Function
    errH:
         
    UnhookListBoxScroll
    End 
    Function
    '''''''' end normal module code 
    خوب حالا روی List Box دابل کلیک میکنیم و کد زیر را وارد میکنیم

    کد PHP:
      Private Sub ListBox1_MouseMove(ByVal Button As IntegerByVal Shift As IntegerByVal X As SingleByVal Y As Single)
      
    HookListBoxScroll MeMe.ListBox1
      End Sub 

    اگر ComboBox بود

    کد PHP:
      Private Sub ComboBox1_MouseMove(ByVal Button As IntegerByVal Shift As IntegerByVal X As SingleByVal Y As Single)
      
    HookListBoxScroll MeMe.ListBox1
      End Sub 

    اخطار: این یک موضوع قدیمی است
    به دلیل قدیمی بودن موضوع، ممکن است برخی فایل های ضمیمه به درستی کار نکنند. لطفا در صورت عدم ضرورت، از بالا آوردن موضوعات قدیمی خودداری نمایید.
    فايل هاي پيوست شده فايل هاي پيوست شده

    در سرزمینی کہ نتوان مردانہ زیست ، مردانہ مردن بهتر از این زندگیست

  2. سپاس ها (2)


  3.  


اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. آموزش - غیر فعال کردن دکمه close در userform
    توسط ali.b در انجمن سوالات پیرامون ويژوال بيسيك - VBA Questions
    پاسخ ها: 1
    آخرين نوشته: 2019/01/05, 19:50
  2. پاسخ ها: 2
    آخرين نوشته: 2016/02/28, 13:41
  3. پاسخ ها: 2
    آخرين نوشته: 2015/12/03, 01:44
  4. کليک در listbox و انتقال داده ها به combobox
    توسط Ali Parsaei در انجمن سوالات پیرامون ويژوال بيسيك - VBA Questions
    پاسخ ها: 3
    آخرين نوشته: 2014/09/25, 10:16

بازدید کنندگان با جستجو های زیر این صفحه را پیدا کرده اند

انجمن اكسل ايران , اكسل , اكسس , سوال و جواب اكسل , سوال اكسس , انجمن اكسل ايران , توابع اكسل, آموزش اكسل, آموزش اكسس, VBA, ويژوال بيسيك

علاقه مندی ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  
  • BB code ها فعال هستند
  • شکلک ها فعال هستند
  • کد [IMG] فعال است
  • کد [VIDEO] فعال است
  • کد HTML غیر فعال است