Wenigstens läuft es schon mal fehlerfrei durch:
Delphi-Quellcode:
for i := Memo1.Lines.Count - 1 downto 0 do
begin
laenge1 := length(Memo1.Lines[i]);
laenge2 := length(Memo1.Lines[i-1]); // Was passiert hier, wenn i=0 ist?
Bist du sicher, dass das fehlerfrei durchläuft. Kann eigentlich nicht.
Im übrigen würde ich das mit einer zweiten Stringlist lösen, so wie im Vorschlag von EmWieMichael. Dabei kopierst du einfach die Zeilen, die du brauchst in die zweite Stringlist bzw. erzeugst da die Leerzeilen, wo du sie brauchst. Das originale Memo bleibt dabei unverändert und du musst dich nicht mit veränderten Zeilen-Indizes herumärgern, die zwangsläufig durch das Entfernen von Zeilen entstehen.
Erst ganz zum Schluss kannst du die zweite Stringlist ins originale Memo zurückkopieren.