Um die Probleme etwas zu minimieren kannst Du auch den Aufruf von WrapText erweitern:
Delphi-Quellcode:
Memo2.Text := WrapText(StringReplace(Memo1.Text,#13#10,' ',[rfReplaceAll])
,sLineBreak
, [' ','.',',','!','?',#9] // Hier alle Zeichen einfügen an denen umgebrochen werden kann
,StrToInt(edit1.Text));
Oder Du gest hin und normalisierst den Text erstmal (z.B. Leerzeichen nach Satzzeichen einfügen..).
Jedoch ist das mit WrapText einfacher