tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルマウスホイールのスクロール量の設定
記事No4751
投稿日: 2007/01/03(Wed) 18:52
投稿者
マウスホイールのスクロール量を設定ページか何かで設定したいと思います。
ただ、困ったことに、e.Deltaは取得のみです。
Panelのホイールスクロールをするのにその移動量が
大きすぎるので、設定した移動量にしたいのですがどうしたらいいでしょうか?

[ツリー表示へ]
タイトルRe: マウスホイールのスクロール量の設定
記事No4752
投稿日: 2007/01/04(Thu) 01:23
投稿者YAS
スクロール量を取得できるクラスはありますが,設定できるクラスは見あたりませんでした。
Win32APIのSystemParametersInfo関数を使う必要があると思います。
下のように定義します。

    <DllImport("user32.dll")> _
    Public Shared Function SystemParametersInfo( _
        ByVal uiAction As SPI, _
        ByVal uiParam As Integer, _
        ByVal pvParam As Integer, _
        ByVal fWinIni As SPIF) _
        As Integer
    End Function

    Public Enum SPI As Integer
        SETWHEELSCROLLLINES = 105
    End Enum

    Public Enum SPIF As Integer
        SENDCHANGE = 2
    End Enum

使うときはこんな感じです。

        Dim WheelScrollLines As Integer = 5
        Call SystemParametersInfo(SPI.SETWHEELSCROLLLINES, WheelScrollLines, 0, SPIF.SENDCHANGE)

変更はシステム全体に通知され,レジストリに保存されます。
(コントロールパネルのマウスのスクロール量を変更したのと同じだと思います。)

[ツリー表示へ]
タイトルRe^2: マウスホイールのスクロール量の設定
記事No4753
投稿日: 2007/01/04(Thu) 15:43
投稿者
>スクロール量を取得できるクラスはありますが,設定できるクラスは見あたりませんでした。
>Win32APIのSystemParametersInfo関数を使う必要があると思います。
あの、panelコントロールの中のみで、MouseWheelなどを使ってスクロール量を変えることはできませんか?
panelのスクロール量を取得して、MsgBoxを使って表示してみると、120となっていました。
又はpanelの標準のホイールスクリーンではなく自分でコードを書く場合どんなメソッドを使ってホイールの回転数を求めればいいのでしょうか?

[ツリー表示へ]
タイトルRe^3: マウスホイールのスクロール量の設定
記事No4755
投稿日: 2007/01/04(Thu) 17:34
投稿者YAS
> あの、panelコントロールの中のみで、MouseWheelなどを使ってスクロール量を変えることはできませんか?
> panelのスクロール量を取得して、MsgBoxを使って表示してみると、120となっていました。
> 又はpanelの標準のホイールスクリーンではなく自分でコードを書く場合どんなメソッドを使ってホイールの回転数を求めればいいのでしょうか?

なるほど。
具体的にお答えするために,今,120と表示されるコードを示していただけませんか?

[ツリー表示へ]
タイトルRe^4: マウスホイールのスクロール量の設定
記事No4758
投稿日: 2007/01/04(Thu) 19:57
投稿者
> なるほど。
> 具体的にお答えするために,今,120と表示されるコードを示していただけませんか?
Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
        Panel2.Select()
    End Sub
これでpanelにフォーカスを移すと、ホイールを動かすと動きます。
このときに、
Private Sub Panel2_MouseWheel(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles Panel2.MouseWheel
        MsgBox(e.Delta.ToString)
    End Sub
とすると、下に動かすと-120、上に動かすと120を返します。

[ツリー表示へ]
タイトル追伸
記事No4760
投稿日: 2007/01/04(Thu) 20:05
投稿者
すみません。
質問を受けているのにほかの人の質問にこたえてしまいすみません。
決して、YASさんを軽蔑というか、そういうものはしてません。
お気を悪くされたなら謝ります。
本当にすみません。

[ツリー表示へ]
タイトルRe^5: マウスホイールのスクロール量の設定
記事No4762
投稿日: 2007/01/04(Thu) 23:34
投稿者YAS
> Private Sub Panel2_MouseWheel(ByVal sender As Object, ByVal e As _
>  System.Windows.Forms.MouseEventArgs) Handles Panel2.MouseWheel
>         MsgBox(e.Delta.ToString)
>     End Sub

ここでe.Deltaの値に応じてスクロールさせたいのでしょうか?
ここのe.Deltaは,クリック感のあるホイールではいつでも120,-120を返します。
(コントロールパネルのスクロール量の設定には左右されません。)
基本的にこのイベントで分かることは,ホイールをどちらの向きに回したかという
ことだけだと思います。
ですから,ホイールの1ノッチ?でスクロールさせたい量を自分で定義する必要
があるのではないでしょうか。

[ツリー表示へ]
タイトルわかりました。ありがとうございます。
記事No4763
投稿日: 2007/01/04(Thu) 23:45
投稿者
>ですから,ホイールの1ノッチ?でスクロールさせたい量を自分で定義する必要
>があるのではないでしょうか。
とすると変数か何かを使って1ノッチを取得し、1ノッチの移動量を設定してAutoScrollPosition
に加算(減算)すればいいと言うことですよね?
ありがとうございました。
やってみます。

[ツリー表示へ]