Im ersten Versuch von mir war ein grober Fehler, habe ihn oben behoben.
Hier mal eine Version in PascalScript, sollte recht einfach übertragbar sein:
Delphi-Quellcode:
program Scriptname;
procedure VerschiebeZeilen(sl : TStringList; AStartLine : Integer; ACount : Integer; ATargetLine : Integer);
var
slTemp : TStringList;
i : Integer;
begin
slTemp := TStringList.Create;
// Die zu verschiebenden Zeilen sammeln.
for i := AStartLine to AStartLine + ACount - 1 do slTemp.Add(sl[i]);
// Nun die zu verschiebenden Zeilen löschen
// Es wird immer AStartLine gelöscht, da dadurch die nachfolgenden Zeilen "nach vorne rutschen".
for i := 1 to ACount do sl.Delete(AStartLine);
// Und anschließend an der gewünschten Position einfügen.
// Dabei wird mit der letzten Zeile der gesammelten Zeilen begonnen,
// da diese bei jedem Einfügen einer neuen Zeile nach "hinten" verschoben werden.
// Im Ergebnis bleibt dadurch die ursprüngliche Reihenfolge erhalten.
for i := slTemp.Count - 1 downto 0 do sl.Insert(ATargetLine - ACount,slTemp[i]);
slTemp.Free;
end;
var
sl : TStringList;
begin
sl := TStringList.Create;
sl.Add('1'); sl.Add('2'); sl.Add('3'); sl.Add('4'); sl.Add('5');
sl.Add(' ');
sl.Add('6'); sl.Add('7'); sl.Add('8'); sl.Add('9'); sl.Add('10');
sl.Add(' ');
sl.Add('11'); sl.Add('12'); sl.Add('13'); sl.Add('14'); sl.Add('15');
VerschiebeZeilen(sl,0,5,10);
ShowMessage(sl.Text);
sl.Free;
end.