Ich finde ihn verständlich, an der Position des Cursors wird Text eingefügt.
Die Vorgehensweise mit Text := Text + 'string' ist bei einem RichEdit außerdem falsch, es bewirkt ein Löschen eventuell gesetzter Formatierungen. Habe ich keinen formatierten Text ist das RichEdit überdimensioniert, dann ist ein Memo passender. Aus diesem Grund und weil das setzen von Text bei SelStart das schnellste ist nutze ich das eigentlich nur noch.
Ob die Geschwindigkeit nachrangig ist kann nur der Threadstarter sagen.
Was nun genau im RichEdit abläuft, wenn bei SelStart Text eingefügt wird, entzieht sich meiner Kenntnis. Ich kenne die internen Vorgänge(rich*.dll) nicht.
Fakt ist das mit Text := Text + 'string' jedesmal der gesamte Text im RichEdit ausgetauscht wird. Es muss ja erst ein String aus dem RichEdit geholt/zusammengesetzt und dann wieder eingefügt werden.
Mit Sicherheit wird nicht der gesamte String(Text) neu zusammengesetzt/erweitert, wenn Text bei SelStart eingefügt wird, diese Aussage kann ich aus den ermittelten Geschwindigkeiten ableiten.
Hab mal eine Testumgebung erstellt in der in einem RichEdit vorab 500 Zeilen mit je 100 Zeichen angelegt werden.
Eine anschließend ausgeführte Schleife mit 1000 Durchgängen ergab folgende Werte:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Code | Millisekunden ------------------------------------------------------------------------- RichEdit.Text := RichEdit.Text + 'Y'; | 11800 ------------------------------------------------------------------------- s := RichEdit.Lines[Pred(RichEdit.Lines.Count)]; | 313 RichEdit.Lines[Pred(RichEdit.Lines.Count)] := s + 'Y'; | ------------------------------------------------------------------------- RichEdit.SelText := 'Y'; | 78 ------------------------------------------------------------------------- s := s + 'Y'; | 0 RichEdit.Lines.Add(s); | ------------------------------------------------------------------------- |
Die Variante RichEdit.SelText := 'Y' hat den Vorteil das man während des Einfügens Formatierungen setzen kann.
Um das ganze auf die Spitze zu treiben noch die Variante mit Lines.Add geändert und es wird noch schneller.
Delphi-Quelltext
1: 2:
| s := s + 'Y'; RichEdit.SelText := s + #13#10; |
Das Hinzufügen von Zeilen auf diese Art ist ca. 3x schneller als Add().