Einzelnen Beitrag anzeigen

Dosenelepfand

Registriert seit: 13. Sep 2006
19 Beiträge
 
Delphi 5 Enterprise
 
#1

Weiterentwicklung TRichEdit zu Syntax-Lighting Komponente

  Alt 13. Sep 2006, 11:09
Hallo!

Ich versuche derzeit, einen Unicode-fähigen Syntax-Lighting Editor zu schreiben. Dazu wollte ich die Komponente TTNTRichEdit aus der TNT-Bibliothek als Grundlage verwenden.

Ich habe nun eine Klasse geschrieben, die die Informationen über die gewünschte Färbung von Bereichen, Schlüsselwörtern etc. aus einer XML Datei einliest, sichert und in der Lage ist, einen Text nach diesen Informationen zu formatieren.
Genau genommen wird im letzten Schritt der Plaintext nach Bereichen / Schlüsseln durchforstet und ein RTF-Code generiert. Wichtig hierbei: ich speichere den RTF-Code für jede Zeile einzeln und verwende dafür eine TTNTStringList. Bei einem Update werden stets nur die wirklch betroffenen Zeilen neu formatiert und ihr RTF-Code generiert. Dies sei gesagt, da mein Problem die Geschwindigkeit ist, und ich somit recht sicher bin, dass es nicht am eigentlichen Parsing-Vorgang liegt.
Nachdem der RTF-Code generiert wurde, werden - und das scheint wichtig - die RTF-Zeilen in der TTNTStringList zu einem Gesamtstring zusammengefügt (dazu benutze ich schlicht die Eigenschaft TTNTStringList.Text), der RTF-Kopf hinzugefügt und der so generierte RTF-Code vollständig an das TTNTRichEdit übergeben.
Diese Aktualisierung des RTF-Codes und die anschließende Komplettübergabe an das TTNTRichEdit wird bei jedem Tastendruck durchgeführt.

Vom Verfahren funktioniert alles wunderbar. Problem ist allerdings die Geschwindigkeit. Bei großen Datein wird die Komponente langsam. Da ich, wie oben gesagt, recht sicher bin, dass es nicht am Parsing-Vorgang liegt, vermute ich, dass das stetige komplette Setzen des RTF-Codes der Komponente die Schwierigkeiten bereitet. Leider habe ich auch keine Idee, wie ich dies umgehen könnte, da man den RTF-Code der einzelnen Zeilen nicht setzen kann.

Hat jemand eine Idee, wie dieses Geschwindigkeitsproblem behoben werden könnte?

Muss ich vielleicht sogar auf ein anderes, keinen RTF-Code generierendes Verfahren umsteigen?


Liebe Grüße und Dank im Voraus,
Der/Das Dosenelepfand
  Mit Zitat antworten Zitat