Ich vermute mal, der ListView steht im ViewStyle vsReport?
Dieser Code scrollt den aktuellen Eintrag ungefähr in die Mitte, so das überhaupt möglich ist.
Delphi-Quellcode:
var
DI: Integer;
DY: Integer;
H: Integer;
I: Integer;
R0: TRect;
R1: TRect;
begin
if ListView1.Items.Count <= ListView1.VisibleRowCount then Exit;
R0 := ListView1.Items[0].DisplayRect(drSelectBounds);
R1 := ListView1.Items[1].DisplayRect(drSelectBounds);
H := R1.Top - R0.Top; // Höhe eines Eintrags
DI := (ListView1.VisibleRowCount + 1) div 2; // Anzahl der Items über dem aktuellen
DY := H*(ListView1.ItemIndex - ListView1.TopItem.Index - DI); // zu scrollender Wert
ListView1.Scroll(0, DY);
end;