Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#19

AW: StringList Textblöcke verschieben

  Alt 22. Mai 2019, 13:35
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.
  Mit Zitat antworten Zitat