No.1
- 回答日時:
リストボックスであるならば動くと思いますよ。
スクロールバーオブジェクトは動かないようですが。
(VB6 & win2000Proにて確認)
VBでは真中ボタンのスクロールイベントは取得できないようです。(APIを除けばですが。)
もし動かないようでしたらOSバージョンVBバージョンの補足を願います。
No.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 終了------
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ノートパソコン マウスの問題 2 2022/07/30 18:33
- 郵便・宅配 マンションなどの宅配ボックスの利用方法について 4 2023/03/17 21:47
- Windows 10 タスクバー上に表示されたアドレス・ボックス? 1 2023/04/30 17:37
- 一眼レフカメラ 撮影用ボックスの使い方 3 2023/04/17 20:56
- 照明・ライト シーリングライトを取り替えるんですが、教えて下さい。 古いシーリングライトを外したら天井にはこんなも 4 2022/07/11 12:51
- 掃除・片付け ゴキブリが出た時、どこまで消毒しますか? 自分の部屋にて、カサっと聞こえたのでそちらを見たのですが何 4 2022/06/21 12:57
- マウス・キーボード PC画面に表示されているHPなどを上下にスライドさせたい 7 2023/03/17 11:05
- その他(プログラミング・Web制作) マウスオーバー→ホイール回転でスクロールできない 2 2022/10/31 10:06
- InternetExplorer(IE) Edge でマウスの真ん中のボタン(ミドルボタン)を押すと、スクロールするのを無効にしたい 2 2023/06/11 05:05
- Chrome(クローム) グーグルクロムをマイクロソフト・エッジに切り替える方法 2 2022/06/20 10:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
タスクマネージャーのプロセス...
-
バックグラウンドのプロセスの...
-
起動中の他のプログラム(orプ...
-
CreateObjectで作成したExcelの...
-
プロセスのアタッチ・デタッチ...
-
C#でのbatファイル実行結果取得
-
Windowsでのfork方法
-
ロードアベレージが高いのです...
-
explorer.exeが異様にメモリを食う
-
シェルで親プロセス終了時に子...
-
非表示になったエクセルは?
-
他のEXEが起動しているかの確認
-
警告『 別のプロセスで使用され...
-
VB6.0 SHELLで起動...
-
VBSからbat実行(WMI)して戻り値...
-
OSPFでプロセスを分ける意義に...
-
SendMessageが失敗するときがある
-
execvpでのcdコマンドについて。
-
起動中のEXCELファイル(EXCEL...
-
API関数 GetExitCodeProcess
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
explorer.exeが異様にメモリを食う
-
タスクマネージャーのプロセス...
-
C#でのbatファイル実行結果取得
-
プロセスのアタッチ・デタッチ...
-
VB6.0 SHELLで起動...
-
プロセスIDからウィンドウハ...
-
Process.Startの戻り値を後で取得
-
ウィンドウのタイトルからプロ...
-
他のEXEが起動しているかの確認
-
ADOでアクセスのレコードに...
-
怪しいプロセス教えてください。
-
別のプロセスの関数を呼び出す...
-
C++のプログラムをバックグラウ...
-
Linuxでのスレッド間メッセージ...
-
C++でシェルを起動
-
プロセスIDの取得方法について
-
OSPFでプロセスを分ける意義に...
-
非表示になったエクセルは?
-
Windowsでのfork方法
おすすめ情報