2013-08-21 1 views
5

У меня есть TListView с некоторыми специализированными областями, в которых отображаются подсказки инструментов. Потому что я не могу по дизайну определить конкретные области на TListView, чтобы отображать больше, чем подсказку инструмента за Subitem.Как рассчитать, как далеко прокручивается пользователь в TListView, но не во время прокрутки пользователя?

Таким образом, я создал структуру, которая содержит их положение в виде подсказки (подсказки). Эта часть работает нормально. Однако эти позиции являются относительными в пределах TListView до самого верха, поэтому, как только пользователь прокрутил, MousePos все еще ссылается на полную видимость TListView, независимо от того, где прокручивается TListView.

Это имеет смысл; но я хочу добавить к координате Y, как далеко прокручивается пользователь. (Я также хотел бы сделать то же самое для X-координаты, но это менее актуально.) Но насколько я могу собрать, есть A) никакого механизма на TListView, чтобы обнаружить это, и B) большинство руководств, которые говорят о TListView и прокрутка относятся к захвату прокрутки , так как это происходит, а не в моем случае, во время другого события (в данном случае, при перемещении мыши).

Итак, как бы я мог определить или рассчитать, насколько далеко прокрутил пользователь, не прокручивая событие?

+0

Помогает ли 'TopItem' свойство' TListView' вообще? – 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; 


Это должно работать, только если ваш ListView находится в vsIcon или vsSmallIcon стиле зрения. (Вы, кажется, не упоминали, какой стиль просмотра вы используете). Тем не менее, с простым тестом здесь выглядит так же, как и в стиле vsReport. ViewOrigin.Y дает точное значение «nPos» TScrollInfo, полученное по вызову GetScrollInfo.

Смежные вопросы