2013-08-21 9 views
5

TListViewには、ツールチップを表示する特殊な領域があります。 の特定の領域は、設計上、Subitemごとにツールチップ以外のものを表示することができません。ユーザーがスクロールしている間にTListViewでスクロールした距離を計算するにはどうすればよいですか?

私は、ツールチップ(ヒント)としてその位置を含む構造を作成しました。この部分は正常に動作します。ただし、これらの位置はTListView内の相対位置であるため、ユーザーがスクロールするとTListViewがスクロールされた場所に関係なく、MousePosはまだTListViewの完全な表示を参照します。

これは意味があります。ユーザーがスクロールした距離をY座標に追加したいと考えています。 (私はX座標についても同じことをしたいが、あまり関係はない)しかし、私が集めることができる範囲では、A)これを検出するためのメカニズムはない。 TListViewとスクロールは、のようにスクロールをキャプチャすることを指し、私のケースでは、別のイベント(この場合はマウス移動)中ではありません。

したがって、スクロールしているイベントではなく、ユーザーがスクロールした距離を検出または計算するにはどうすればよいですか?

+0

'TListView'の' TopItem'プロパティはまったく役に立ちますか? – lurker

+0

@mbratch:それは確かに興味深いものです。しかし、そのPosition.Yはテーブル内のポジションであり、各アイテムの高さを取得する方法はわかりません。 – Svip

+1

@ TLama:ありがとう、それは私が必要としていたように正確に働いた。 – Svip

答えて

6

メカニズムはListView.ViewOriginです。

リスト・イメージの論理的な起点を判別するためにViewOriginを読んでください。 リストビューがスクロールされていない場合、ViewOriginは(0,0)です。それ以外の場合は、 はx座標を使用して、ビューが水平方向にスクロールされた のピクセル数を決定し、y座標は ピクセルの数を決定してビューを垂直方向にスクロールします。

var 
    Pt: TPoint; 
begin 
    Pt := ListView1.ViewOrigin; 


あなたのリストビューがvsIconまたはvsSmallIconビュースタイルである場合にのみ動作するはずです。 (あなたはあなたが使っているビューのスタイルについて言及していないようです)。それにもかかわらず、ここで簡単なテストでは、それもvsReportスタイルで動作するように見えます。 ViewOrigin.YはGetScrollInfo呼び出しによって取得されたTScrollInfoの 'nPos'の全く同じ値を返します。

関連する問題