Autor |
Beitrag |
Spurius
      
Beiträge: 142
Win XP Home
D3 Prof, D7 Prof
|
Verfasst: Di 23.12.03 20:15
Hallo,
wie kann ich etwas in ein Richedit einfügen, aber nicht erst am Ende?
Z.b.Ich hab nen Text drinstehen und will, dass in der Zeile, wo mein Cursor steht, 'hallo' eingefügt wird.
Gruß
Spurius
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Di 23.12.03 21:02
So müsste es funktionieren:
Delphi-Quelltext 1:
| richedit1.Text := copy(richedit1.Text, 0, richedit1.SelStart) + 'deintext' + copy(Richedit1.text, Richedit1.SelStart+1, length(richedit1.text)); |
|
|
Spurius 
      
Beiträge: 142
Win XP Home
D3 Prof, D7 Prof
|
Verfasst: Di 23.12.03 22:36
Hallo,
Danke, es geht. Kannst du mir erklären, wie das funkrioniert? Weil ich versteh das nicht.
Gruß
Spurius
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Di 23.12.03 22:48
copy Kopiert aus dem String (1.Parameter) einen bestimmten Teilstring. Der 2. Parameter gibt den ersten Buchstaben an, ab dem Kopiert werden soll und der 3. die Anzahl der Zeichen. Hier wird der String an der Cursorposition getrennt und der andere string eingefügt.
|
|
Spurius 
      
Beiträge: 142
Win XP Home
D3 Prof, D7 Prof
|
Verfasst: Di 23.12.03 22:50
Ok, vielen Dank.
SelStart gibt die Cursorpos an, oder?
Gruß
Spurius
|
|
Terra23
      
Beiträge: 872
Win 8
Delphi 7
|
Verfasst: Di 23.12.03 22:50
Ich kenne zwar den Code nicht, aber wenn ich das richtig deute, bedeutet es folgendes:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| Richedit1.Text := Copy(Richedit1.Text , 0 , Richedit1.SelStart ) + 'Dein Text' + Copy(Richedit1.Text , Richedit1.SelStart+1 , Length(Richedit1.text |
_________________ Hasta La Victoria Siempre
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Di 23.12.03 22:52
Ja, allerdings solltest du vorher noch SelStart auf > 0 überprüfen, damit der string nicht einfach am Anfang eingefügt wird.
|
|
Alexander F
      
Beiträge: 149
Win XP, Win 2000
D6 PE, D7 Prof, D8 Prof
|
Verfasst: Di 23.12.03 22:56
So würde ich das allerdings nicht machen, da die Eigenschaft TEXT erst zusammengestellt wird und dann ncoh überschrieben wird. Das dauert also ziemlich lange.
ICh würde das eher über LINES[index] machen:
Delphi-Quelltext 1:
| RichEdit1.Lines[Richedit1.CaretPos.y] := Copy(RichEdit1.Lines[Richedit1.CaretPos.y], 0, Richedit1.CaretPos.X) + 'text' + Copy(RichEdit1.Lines[Richedit1.CaretPos.y], Richedit1.CaretPos.X, Length(RichEdit1.Lines[Richedit1.CaretPos.y])); |
Dürfte wohl schneller sein...
|
|
obbschtkuche
Gast
Erhaltene Danke: 1
|
Verfasst: Di 23.12.03 22:59
Was allerdings ziemlich Wurscht ist, wenn es nicht xyzmal in der Sekunde gemacht wird... und wenn es wirklich auf performance ankommt, sollte es so sein:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| var l: string; begin l := RichEdit1.Lines[Richedit1.CaretPos.y]; RichEdit1.Lines[Richedit1.CaretPos.y] := Copy(l, 0, Richedit1.CaretPos.X) + 'text' + Copy(l, Richedit1.CaretPos.X+1, length(l)); end; |
Was dir 2x GetValue von TStrings erspart ;)
|
|
Alexander F
      
Beiträge: 149
Win XP, Win 2000
D6 PE, D7 Prof, D8 Prof
|
Verfasst: Mi 24.12.03 09:34
Jupp, aber warum sollte man es nicht gleich optimieren? Außerdem wenn im Richedit einiges drin steht, dann macht es schon was aus.
|
|
Spurius 
      
Beiträge: 142
Win XP Home
D3 Prof, D7 Prof
|
Verfasst: Do 22.01.04 15:38
So, der Topic ist zwar schon älter, aber ich hab ein Problem mit dem Code:
Quelltext 1: 2: 3:
| synmemo1.Text := copy(synmemo1.Text, 0, synmemo1.SelStart) + 'irgendeintext' + copy(synmemo1.text, synmemo1.SelStart+1, length(synmemo1.text)); |
Und zwar wenn ich text einfügen will, aber erst ein leerzeichen hinter einem wort, nicht direkt im Anschluss, dann wird dass Wort erst in der nächsten Zeile eingefügt.
Also z.B.
test irgendeintext //wird zu
test
irgendeintext
Kann mir jemand sagen, wie ich den Code verändern muss?
Gruß
Spurius
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 22.01.04 16:10
|
|
Spurius 
      
Beiträge: 142
Win XP Home
D3 Prof, D7 Prof
|
Verfasst: Do 22.01.04 16:35
Jo, das wars.
Thx
Spurius
|
|