Hallo Heiko,
wenn das eine Option für dich ist, dann virtualisiere die ListView einfach - dein Problem löst sich dann wie von selbst. Code aus einer Demo von mir:
Delphi-Quellcode:
procedure TMainForm.ItemRemoveExecute(Sender: TObject);
var
i, n: integer;
begin
n := ListView.ItemIndex;
for i := Pred(ListItems.Count) downto 0 do
if ListItems[i].Selected then
begin
Values.Delete(i);
n := i;
end;
ListItems.Count := Values.Count;
ListView.Invalidate;
ListView.ItemIndex := n;
end;
Freundliche Grüße