Autor Beitrag
Biarchiv
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: Do 12.05.11 17:01 
Hallo,

bei TRichEdit. Gibt es da einen Befehl das ich Text am Ende hinzufügen kann ohne Zeilenumbruch?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
RichEdit1.Lines.Add('1');
RichEdit1.Lines.Add('2');
RichEdit1.Lines.Add('3');

Resultat:
1
2
3


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
RichEdit1.Lines.???('1');
RichEdit1.Lines.???('2');
RichEdit1.Lines.???('3');

Resultat: 123
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19273
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 12.05.11 17:07 
ausblenden Delphi-Quelltext
1:
2:
3:
RichEdit1.Text := RichEdit1.Text + '1' + '2' + '3';

Resultat: 123
:mrgreen:
Biarchiv Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: Do 12.05.11 17:09 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
RichEdit1.Text := RichEdit1.Text + '1' + '2' + '3';

Resultat: 123
:mrgreen:


Hallo,

ich muss es am Ende von einem Text hinzufügen. Allerdings werden verschiedene Werte zeit versetzt abgefragt. Somit ginge das nicht.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19273
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 12.05.11 17:31 
user profile iconBiarchiv hat folgendes geschrieben Zum zitierten Posting springen:
ich muss es am Ende von einem Text hinzufügen. Allerdings werden verschiedene Werte zeit versetzt abgefragt. Somit ginge das nicht.
Warum nicht? Ich dachte du willst einfach ans Ende des aktuellen Textes einen weiteren hinzufügen. Das geht genau so. :nixweiss:
Biarchiv Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: Do 12.05.11 18:09 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconBiarchiv hat folgendes geschrieben Zum zitierten Posting springen:
ich muss es am Ende von einem Text hinzufügen. Allerdings werden verschiedene Werte zeit versetzt abgefragt. Somit ginge das nicht.
Warum nicht? Ich dachte du willst einfach ans Ende des aktuellen Textes einen weiteren hinzufügen. Das geht genau so. :nixweiss:


Hallo,

SORRY. Geht doch, war mein Fehler. Danke für den TIPP.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Do 12.05.11 18:31 
Hallo,

schneller dürfte das sein:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
RichEdit.SelStart := MAXINT; //einmalig setzen
RichEdit.SelText := '1';
RichEdit.SelText := '2';
RichEdit.SelText := '3';


so wird nicht jedesmal der komplette Text des RichEdit bearbeitet, SelStart wird automatisch weitergeschoben.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19273
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 12.05.11 18:51 
Findest du den Code intuitiv verständlich?

Was die Geschwindigkeit angeht: Die dürfte hier nachrangig sein. Aber warum du meinst, dass es schneller ist, wenn das RichEdit erst feststellen muss wo der Text eingefügt werden muss, um dann den Text vorher und nachher (hier eben leer) damit zusammenzusetzen, ist mir nicht klar. :gruebel:
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Fr 13.05.11 14:36 
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:

ausblenden 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.

ausblenden 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().

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )