Как установить ViewportPostion элемента, выбранного в TListView внутри TVertScrollBox

У меня есть TListView, содержащий сотню элементов внутри TVertScrollBox. Я хотел установить ViewportPosition выбранного элемента (сделано по коду) в TListView. TListView не прокручивается, прокручивается только TVertScrollBox.

Имея 100 элементов в TListView, я не хочу, чтобы мой пользователь прокручивал весь список элементов, но вместо этого при выборе с помощью кода он автоматически устанавливает ViewportPostion для выбранного элемента.

Я пытаюсь понять из следующего кода, как изменить 0 на переменный номер выбранного элемента.

VertScrollBox1.ViewportPosition := PointF(VertScrollBox1.ViewportPosition.X, 0);

Буду признателен за любую помощь или подсказку по этому поводу.


person RickyBelmont    schedule 18.10.2020    source источник


Ответы (1)


Предполагая, что TListView находится внутри TVertScrollBox, а TListView.Height достаточно велик, чтобы вообще не было полосы прокрутки, затем установить область просмотра так, чтобы номер элемента TListView N был вверху (вы получаете N при поиске данных), затем чтобы прокрутить элемент N в поле зрения, вы делаете:

VertScrollBox1.ViewportPosition := PointF(VertScrollBox1.ViewportPosition.X,
                                          ListView1.ItemAppearance.ItemHeight * N);
person fpiette    schedule 18.10.2020
comment
Это имеет смысл. Я попытаюсь. Хотя у меня есть другие визуальные компоненты поверх TListView, я мог бы это учесть. Я вернусь к вам по этому поводу. - person RickyBelmont; 18.10.2020
comment
Если у вас есть другой компонент над списком, просто добавьте ListView1.Position.Y к вычисляемому значению. Получается (ListView1.ItemAppearance.ItemHeight * N) + ListView1.Position.Y - person fpiette; 18.10.2020
comment
Идеально! Я учел остальные визуальные компоненты, как вы сказали, и это работает! Огромное спасибо. - person RickyBelmont; 18.10.2020