Ja, Delphi nutzt aktuell das Richedit 4.1 und davor ewig lang die 2.0.
Kann/wird gut sein, dass sich dabei hier und da bissl was geändert hat.
Erstmal solltet ihr einwas bedenken.
Delphi/Embarcadero pfusch dort bereits extrem pervers an der Komponente rum und verbiegt mehr schlecht als recht die Zeilenumbrüche.
-> SelStart/SelLength stimmen nicht mehr mit den Positionen im Text-String überein ... je Zeile verrutsch es um ein weiteres Zeichen.
Windows arbeitet hier mit #13 (erschreckender Weise) und Delphi bricht das halbherzig/teilweise auf #13#10 um.
Außerdem kapselt TRichEdit die Komponente des Betriebssystems
und da hat Microsoft scheinbar nicht vor zukünftig noch irgendwas groß dran machen zu wollen.
Die Referenzimplementation für TRichEdit (WordPad) soll angeblich abgeschafft werden
und die Referenzimplementation für TMemo (Notepad) wurde auch verunstaltet. (nutzt jetzt anstatt dem Multiline-EDIT des
GDI ein 3D-gerendertes RichEditD2D des Direct2D)
Bei RichEdit.Text und RichEdit.Lines.Text/LoadFromFile (ebenfalls beim TMemo) muß man auch unterscheiden, dass .Text direkt via WM_SETTEXT ins Control geht,
während Lines (TStrings) per se Zeilenweise zugreift ... teilweise wird aber im TStrings-Nachfahren doch auf's WM_SETTEXT umgeleitet, anstatt wirklich jede Zeile einzeln (aber nicht bei allen Controls)
Beim Lines.Text wird aus allen Zeilen ein neuer String zusammengebaut (und das nicht wirklich sehr optimal)
beim LoadFromFile wird dazu auch normal erstmal alles als TBytes in den
RAM geladen, das dann via TEncoding erstmal in einen String umgewandelt (normal das dann in viele Strings zerlegt und anschließend erneut wieder in "einen" string zusammengesetzt)
Also die Stringlist macht das so,
aber TRichEdit leitet Lines.Text nahezu direkt an EM_STREAMIN weiter (es jagt den Text nur noch sehr oft Stückchenweise durch ein TEncoding)