マウスの真ん中の回る部分をまわすと、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と関連する良く見られている質問

QVBE画面の縦のスクロールバーがマウスホイールで動

エクセル2003・vistaです。
VBE画面の縦のスクロールバーがマウスホイールで動きません。

エクセル2003・XP
エクセル2007・win7
だったら、マウスホイールをグリグリしてスクロールバーを動かせます。

原因と対策を教えてください。
よろしくお願いします。

Aベストアンサー

[OFF2003] VBE でマウスのスクロールができない
http://support.microsoft.com/kb/828806/ja
マウスドライバのせいです。この現象は、仕様に基づいた動作です。

対策
http://blueskynet.seesaa.net/article/34501807.html
Windows Vista だと、UAC の関係で蹴られるかもしれない。
その場合は、コマンドプロンプトを右クリックし『管理者として実行』を選択。
コマンドプロンプト上で、regsvr32.exe ・・・ としてみてください。
http://ameblo.jp/sukiti/entry-11172466007.html

以上、ご参考まで。

Qマウスホイールでスクロールできない

VB6でMsFlexGridを使用していますが、マウスのホイールでスクロールさせることができません。同じプログラムでListBoxも使用していますが、こちらはホイールでスクロールします。
どのようにしたらMsFlexGridでスクロールさせることができますでしょうか?使用PCはXP(SP3)です。

Aベストアンサー

原因:
MsFlexGridがWM_MOUSEWHEELをサポートしていない為、マウスホイールでスクロールしません。

対策1:
コーディングで対応するなら、サブクラス化を利用するしかんりません。サブクラス化したプログラムでエラーが発生するとプログラムに障害が発生するので上級者向きです。

対策2:
フリーウェアーソフトをインストールする。試したのは「どこでもホイール」で動作する(XP SP2)のを確認しました。
http://www.vector.co.jp/soft/win95/util/se044875.html

QアクセスVBA フォームのスクロールバーを動かす。

アクセスVBA フォームのスクロールバーを動かす。

作成したフォームの横スクロールバーポジションを、一番右端や左端にしてしまうことをVBA側でしたいのですが可能でしょうか?

コードがわかりません。お願い致します。

Aベストアンサー

動かしてどうするの?という感じ
ですが、動かすだけならボタン
二つで右、左です。

Private Sub scrollLeft_Click()
Dim lnFormWidth As Long
Dim lnDistance As Long

lnFormWidth = Me.Width
lnDistance = lnFormWidth - CurrentSectionLeft
Me.SetFocus
GoToPage 1, , lnDistance
End Sub

Private Sub scrollRight_Click()
Dim lnFormWidth As Long
Dim lnDistance As Long

lnFormWidth = Me.Width
lnDistance = lnFormWidth - CurrentSectionLeft
Me.SetFocus
GoToPage 1, lnDistance
End Sub

簡潔ですが、見つけにくいですね、
こんなもの。

動かしてどうするの?という感じ
ですが、動かすだけならボタン
二つで右、左です。

Private Sub scrollLeft_Click()
Dim lnFormWidth As Long
Dim lnDistance As Long

lnFormWidth = Me.Width
lnDistance = lnFormWidth - CurrentSectionLeft
Me.SetFocus
GoToPage 1, , lnDistance
End Sub

Private Sub scrollRight_Click()
Dim lnFormWidth As Long
Dim lnDistance As Long

lnFormWidth = Me.Width
lnDistance = lnFormWidth - Curren...続きを読む

Qスクロールバーを点滅させない方法

いつもお世話になっております。
スクロールバーについて質問します。

VB6.0にて開発しています。
手動でスクロールさせるプログラムを作ったのですが、
スクロールバーにフォーカスがうつると
点滅します。これを止めたいのですが
どのように設定すればよいのでしょうか。
コントロールはVScrollBarを使用しています。

あるいは他の種類のスクロールバーで
最初から点滅しないものなどありますでしょうか。

Aベストアンサー

スクロールバー以外のコントロールがありますか?
無ければダミーのピクチャボックスを作成してください。
それで他のコントロールのTABINDEXを、スクロールバーより若いTABINDEXを割り当てます。
簡単にいうとTABINDEX=0はだめです。
んで、スクロールバーのTABSTOP=FALSEにしてみてください。

QvaSpreadコントロールのスクロールバーの背景色

お世話になります。

vaSpreadコントロールで縦横両方のスクロールバーを表示させた時、
コントロールの右隅の部分の表示色をシステム色に(&H8000000F&)
変えたいのですが該当のプロパティーが見当たりません。
変える方法をご存知の方、御教授下さい。

┌────────┬─┐
│        │ │
│ Spread    │ │
│ Control    │ │
│        │ │
│        │ │
│        │ │
├────────┼─┤
│        │■│←この部分
└────────┴─┘

Aベストアンサー

私も、3年ほど前にそのことでさんざん悩んだ挙げ句、下記の方法で解決しました。

ただし、あくまでも大昔の記憶なので詳細は多少異なっているかもしれません。
また、あくまでもvaSpreadコントロールは前バージョンの2.5J、開発環境はVB6.0Jでのことです。

スクロールバーなどの表示色はプロパティとして公開されていないようです。
しかし、最初は、システムカラーで保持されていた色が、何かのタイミングで直接の色指定(例:&H00C0C0C0&)になってしまうようですね。

そこで、プロパティとしては公開してないものの、バイナリー情報としては保持していることであろうという推測のもと、以下のように解決しました。
(直接指定されている色が&H00C0C0C0&の場合)。

1)*.frx、あるいはスプレッドデザイナーで設定を保存(バックアップ)。
2)*.frxをバイナリーエディタで開き、「00、C0、C0、C0」を探す。
3)80、00、00、0Fに変更してみる。
4)フォームを開いて確認。
5)大丈夫だったら、OK、ダメなようだったらバックアップを戻して2)へ戻り違う箇所を探す。

だいぶん昔の記憶で定かではありませんが、上記のようにバイナリー情報を直接変更して解決しました。

私も、3年ほど前にそのことでさんざん悩んだ挙げ句、下記の方法で解決しました。

ただし、あくまでも大昔の記憶なので詳細は多少異なっているかもしれません。
また、あくまでもvaSpreadコントロールは前バージョンの2.5J、開発環境はVB6.0Jでのことです。

スクロールバーなどの表示色はプロパティとして公開されていないようです。
しかし、最初は、システムカラーで保持されていた色が、何かのタイミングで直接の色指定(例:&H00C0C0C0&)になってしまうようですね。

そこで、プロパティとしては公...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報