StartLine und Endline könnten vielleicht eleganter mit
EM_LINEFROMCHAR gelöst werden. Ansonsten würde ich noch BeginUpdate/EndUpdate beim Manipulieren der Zeilen einbauen. Mehr fällt mir nach einem flüchtigen Blick nicht auf.
Schau ich mir morgen mal genauer an, sieht auf jeden Fall eleganter aus.
Ansonsten ist im obigen Code/Vorgehen noch irgendwo ein logischer Fehler drin. Wenn ohne Selection der Cursor (oder aber bei Selection SelStart am Anfang (oder Ende?) einer Zeile steht, wird fälschlicherweise schonmal die vorherige Zeile mit eingerückt.
Muss ich ggf. morgen mal
experimentieren oder evolutionieren woran das liegen könnte.