Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Weiterentwicklung TRichEdit zu Syntax-Lighting Komponente (https://www.delphipraxis.net/77001-weiterentwicklung-trichedit-zu-syntax-lighting-komponente.html)

Dosenelepfand 13. Sep 2006 11:09


Weiterentwicklung TRichEdit zu Syntax-Lighting Komponente
 
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

mkinzler 13. Sep 2006 11:10

Re: Weiterentwicklung TRichEdit zu Syntax-Lighting Komponent
 
Schau dir doch mal SynEdit an.

Elvis 13. Sep 2006 11:12

Re: Weiterentwicklung TRichEdit zu Syntax-Lighting Komponent
 
Synedit kann doch mittlerweile Unicode.
Und ein RichEdit ist so verflucht lahm, das willst du gar nicht dafür hernehmen, glaub' mir. ;)

Dosenelepfand 13. Sep 2006 11:16

Re: Weiterentwicklung TRichEdit zu Syntax-Lighting Komponent
 
Hallo ihr zwei.

@ Elvis:
D.h. also, dass ich, wenn ich eine solche Komponente selbst schreiben möchte, nicht auf einem RichEdit aufbauen sollte? Was gäbe es für Alternativen? Könnte ich bereits bestimmte Funktionalitäten einer anderen Komponente nutzen, oder muss ich in diesem Falle die Komponente von Grund auf selbst schreiben (d.h. auch den Text selbst drucken)?


Liebe Grüße,
Der/Das Dosenelepfand

Elvis 13. Sep 2006 12:10

Re: Weiterentwicklung TRichEdit zu Syntax-Lighting Komponent
 
Du könntest auf SynEdit aufbauen oder schauen wie die es gelöst haben.
SynEdit handhabt Einfärben & Co aber selbst, ein RichEdit ist einfach zu lahm um als CodeEditor zu taugen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz