Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.462 Beiträge
 
Delphi 12 Athens
 
#20

AW: StringList Textblöcke verschieben

  Alt 22. Mai 2019, 13:42
Ich möchte ja keine Zeilen vertauschen sondern nur einen Block von oben irgendwo ganz nach unten verschieben.
Du hast offenbar den Algorithmus noch nicht durchschaut. Deswegen erläutere ich das mal:

Zunächst füge ich an der Zielposition eine ausreichende Anzahl Leerzeilen ein:
Delphi-Quellcode:
      for I := 0 to ACount - 1 do
        lst.Insert(ATargetLine, '');
Dann korrigiere ich den Wert von ASourceLine, falls sich die entsprechenden Zeilen durch das Einfügen nach hinten verschoben haben:
Delphi-Quellcode:
      if ATargetLine < ASourceLine then
        ASourceLine := ASourceLine + ACount;
Nun tausche ich die zu verschiebenden Zeilen mit den gerade eingefügten Leerzeilen aus:
Delphi-Quellcode:
      for I := 0 to ACount - 1 do
        lst.Exchange(ASourceLine + I, ATargetLine + I);
Damit landen die zu verschiebenden Zeilen schon mal an der gewünschten Zielposition und an der ursprünglichen Position sind nun die Leerzeilen.

Im letzten Schritt werden diese Leerzeilen wieder gelöscht:
Delphi-Quellcode:
      for I := 0 to ACount - 1 do
        lst.Delete(ASourceLine);
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat