(предыдущий текст ответа удален)
Обновление после уточнения вопроса.
Хорошо, поэтому вы хотите
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;