Zum bestehenden Code:
- 9000x Length(rtfText.Text) aufzurufen ist verdammt teuer! TRichEditStrings ist eine ganz schlechte Krücke, die irgendwie zwischen Plaintext (Eigenschaft Text), RTF (Methoden LoadFromFile, SaveToFile) und Speicherinhalt konvertiert. Das ist aus gutem Grund nur im implementation-Teil von ComCtrls.pas deklariert und nicht dokumentiert. Damit nach jedem Schleifendurchlauf den Plaintext zu generieren (Kompatibilität mit TCustomMemo), ist eben sehr teuer.
- Warum setzt du SelLength? Das verstehe ich nicht.
Idee für ein grundlegend anderes Verfahren für wirklich große Dateien: Teile und herrsche mit
ConsistentAttributes. Das ist für Boole'sche Eigenschaften vermutlich einfacher zu implementieren als für andere. Dafür brauchst du dann natürlich SelLength. Und eine brauchbare Implementierung für ConsistentAttributes (Message EM_GETCHARFORMAT) in RichEd32, von der ich nicht weiß, ob sie existiert.