Statt Insert() und Delete() könntest du Move() verwenden. Wenn die Selektion zusammenhängend ist, dann vielleicht so:
Delphi-Quellcode:
procedure MoveStrings(s: TStrings; iFrom, iTo, iCount: Integer);
var
i: Integer;
begin
s.BeginUpdate;
try
if iTo < iFrom then
for i := 1 to iCount do
s.Move(Pred(iFrom + iCount), iTo)
else
for i := 1 to iCount do
s.Move(iFrom, Pred(iTo))
;
finally
s.EndUpdate;
end;
end;
Andernfalls müssen die Items einzeln verschoben werden.