Firemonkey Listbox нужен TopItem - PullRequest
       9

Firemonkey Listbox нужен TopItem

0 голосов
/ 08 апреля 2020

Мне нужно иметь возможность получить и установить верхний элемент в списке - что-то вроде свойства ListBox.TopItem было бы здорово. Я не смог найти ничего, что делает эту работу. Любые идеи будут с благодарностью.


Редактировать:

Например: элементы Listbox1 и ListBox2 следующие:

1 Data1 
2 Data2 
3 More Data 
4 More again 
5 Yet more 
6 and this will do.

Отображение в 2 списках, высота обоих элементов:

1 Data1
2 Data2
3 More Data

, и я хочу программно заставить их отображать

3 More Data 
4 More again 
5 Yet more

, и я хочу выяснить, какой элемент является верхним.

1 Ответ

0 голосов
/ 09 апреля 2020

(предыдущий текст ответа удален)

Обновление после уточнения вопроса.

Хорошо, поэтому вы хотите

a) выполнить прокрутить список программно

b), чтобы программно прочесть самый верхний элемент

В следующем списке прокручивается так, что данный элемент становится самым видимым элементом. Однако обратите внимание, что список нельзя прокручивать выше точки, в которой между последним элементом и дном области просмотра будет пустое пространство.

procedure TForm25.SetTopVisibleItem(idx: integer);
var
  ptf: TPointF;
begin
  ptf := PointF(0, idx * ListBox1.ItemHeight);
  ListBox1.ViewportPosition := ptf;
end;

Чтобы получить текущий верхний элемент в области просмотра:

function TForm25.GetTopVisibleItem: TListBoxItem;
var
  x, y: single;
begin
  x := 3; // a small offset is required to assure that
  y := 3; // the point is within an item
  result := ListBox1.ItemByPoint(x, y);
end;
...