DataGridのスクロールイベントについて


キャンキャン  2004-01-15 16:04:01  No: 111329  IP: [192.*.*.*]

初めての質問です。
VB6.0でデータグリッドのスクロールイベントが発生した時、
垂直・水平をどのように判断すればよいか、わからないのです。
どなたか教えて頂けないでしょうか?
垂直・水平どちらをスクロールしても同じイベントが発生して
しまいます。
データグリッドのプロパティに変化があると思うのですが…。


Private Sub DataGrid1_Scroll(Cancel As Integer)

End Sub

編集 削除
岡田 之仁  2004-01-21 05:32:36  No: 111330  IP: [192.*.*.*]

スクロールの水平と垂直を見分けないといけない理由は
何でしょうか?

セレクトされているセルの移動を代用してはいけないで
すか?

RowColChange とか・・・

ご検討下さい。

以上。

編集 削除
岡田 之仁  2004-01-21 05:34:55  No: 111331  IP: [192.*.*.*]

どうしても・・・と言うことであれば、
メッセージフックや、サブクラス化して
DataGridのイベントを捕捉する必要があ
ると思います。

可能か否かについては、SPY++とかで、
実際にどのようなイベントが発生してい
るのか、調べないと解りませんが・・・

以上。

編集 削除
岡田 之仁  2004-01-21 06:17:40  No: 111332  IP: [192.*.*.*]

サブクラス化でできます。

サンプルとしては、やはりここですかネ〜

http://www1.harenet.ne.jp/cgi-bin/cgiwrap/unaap/lib/libsmp.cgi?lang=&function=&page=12

捕捉メッセージは、
Public Const WM_HSCROLL = &H114
Public Const WM_VSCROLL = &H115
です。

ご検討下さい。

以上。

編集 削除
魔界の仮面弁士  2004-01-21 09:23:38  No: 111333  IP: [192.*.*.*]

> VB6.0でデータグリッドのスクロールイベントが発生した時、
> 垂直・水平をどのように判断すればよいか、わからないのです。

前回の表示位置と、今回の表示位置を比較してみては如何でしょう。

# 分割ペインを使っている場合は DataGrid.LeftCol等の替わりに、
# DataGrid.Splits(ペイン番号).LeftCol 等を利用してみてください。

Option Explicit

Private PreCol As Integer
Private PreRow As Variant

Private Sub DataGrid1_Scroll(Cancel As Integer)
    With Me.DataGrid1
        If PreCol <> .LeftCol Then
            PreCol = .LeftCol
            Me.Caption = "水平"
        ElseIf PreRow <> .FirstRow Then
            PreRow = .FirstRow
            Me.Caption = "垂直"
        Else
            Me.Caption = "変化無し"
        End If
    End With
End Sub

編集 削除