マウスの真ん中の回る部分をまわすと、IEなんかでは
スクロールバーがうごきますよね
これとおなじことはできないのですか?

A 回答 (2件)

サンプルです。



これはプロセス監視と呼ばれる方法で実現しています。
OSがソフトのピクチャボックスに送ってくるメッセージを読み取ることをしてますので、途中で中断しないでください。
中断すると落ちます。必ず「Form_QueryUnload」イベントを発生させるようにしてください。

こういったプロセス監視を行うと極めてデバッグしづらいのが特徴です。ぼくの場合は、ActiveX化することにより、デバッグがしづらくなるのを回避しています。その方が使いまわしが効くので便利ですよ。


サンプルではピクチャボックスを使用していますが、[.hWnd](ハンドル)が存在するものであれば、全てに適用できます。


必要なもの
標準モジュール
フォーム
└ピクチャボックス


------標準モジュール 開始------
Option Explicit

Private Const WM_MOUSEWHEEL As Long = &H20A 'ホイールの回転
Private Const GWL_WNDPROC  As Long = (-4)
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long


Private lngProc As Long

Public Function WheelEvents(inWnd As Long, inMode As Boolean) As Boolean

  '監視終了
  Call SetWindowLong(inWnd, GWL_WNDPROC, lngProc)
  lngProc = 0 'プロセスID初期化


  If inMode Then
    '監視開始
    lngProc = SetWindowLong(inWnd, GWL_WNDPROC, AddressOf WheelProc)
    If (lngProc = 0&) Then GoTo PGMERR
  End If

PGMEND:
  WheelEvents = True
  Exit Function
PGMERR:
  WheelEvents = False
End Function

Private Function WheelProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  Select Case uMsg
    Case WM_MOUSEWHEEL
      If wParam = &H780000 Then
        Debug.Print "ホイールを上にクルクル"
      End If
      If wParam = &HFF880000 Then
        Debug.Print "ホイールを下にクルクル"
      End If
  End Select

  WheelProc = CallWindowProc(lngProc, hwnd, uMsg, wParam, lParam)
End Function
------標準モジュール 終了------




------フォーム1 開始------
Option Explicit

Private Sub Form_Load()
  Call WheelEvents(Me.Picture1.hwnd, True)
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  Call WheelEvents(Me.Picture1.hwnd, False)
End Sub
------フォーム1 終了------
    • good
    • 0

リストボックスであるならば動くと思いますよ。


スクロールバーオブジェクトは動かないようですが。
(VB6 & win2000Proにて確認)

VBでは真中ボタンのスクロールイベントは取得できないようです。(APIを除けばですが。)

もし動かないようでしたらOSバージョンVBバージョンの補足を願います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング