OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

リストボックスについておしえてください

  • すぐに回答を!
  • 質問No.198102
  • 閲覧数172
  • ありがとう数0
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 23% (40/169)

マウスの真ん中の回る部分をまわすと、IEなんかでは
スクロールバーがうごきますよね
これとおなじことはできないのですか?
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル12

ベストアンサー率 65% (276/422)

サンプルです。

これはプロセス監視と呼ばれる方法で実現しています。
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 終了------
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル8

ベストアンサー率 42% (12/28)

リストボックスであるならば動くと思いますよ。 スクロールバーオブジェクトは動かないようですが。 (VB6 & win2000Proにて確認) VBでは真中ボタンのスクロールイベントは取得できないようです。(APIを除けばですが。) もし動かないようでしたらOSバージョンVBバージョンの補足を願います。
リストボックスであるならば動くと思いますよ。
スクロールバーオブジェクトは動かないようですが。
(VB6 & win2000Proにて確認)

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

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


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ