Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Fragen zu RichEdit?
jackie05 - Do 11.12.08 04:20
Titel: Fragen zu RichEdit?
Hallo,
ich habe folgendes problem und zwar, möchte ich bestimmte Texte in RichEdit mit Farbe und/oder Fett darstellen.
Ich hab mir das mal so überlegt:
RichTest: [F:255,0,0]Test![/t]
RichTest: [255,0,0]Test![/t]
RichTest: [F]Test![/t]
Ergebnis:
RichTest: Test!
RichTest: Test!
RichTest: Test!
Also, entweder kann ich nur die RGB werte angeben oder auch F für Fett, mit dem Doppelpunkt trenne ich die 2 Sachen und mit [/t] schließe ich die Tags ab.
Nur wie könnte ich das per Button Klick realisieren?
Ich wäre euch sehr dankbar, wenn Ihr mir Helfen könntet.
MfG
martin300 - Do 11.12.08 10:54
Hallo,
eine Möglichkeit wäre
Delphi-Quelltext
1: 2: 3: 4:
| RichEdit1.SelStart := 0; RichEdit1.SelLength := 5; RichEdit1.SelAttributes.Color := clRed; RichEdit1.SelAttributes.Style := [fsbold]; |
jackie05 - Do 11.12.08 12:04
Danke Dir.
Das weiss ich, aber ich möchte RichEdit auf die Tags prüfen und dementsprechend die Texte einfärben bzw. Fett markieren.
Ich hab ja ein beispiel gepostet, wie ich mir das vorgestellt habe, nur weiss ich nicht, wie ich vorgehen muss.
MfG
Delete - Do 11.12.08 13:12
Starttag suchen, Position merken, auswerten und löschen. Dann Endtag suchen, Position merken und löschen. Nun hast Du die Berechnungsgrundlagen für SelStart und SelLength, die Formatanweisungen für SelAttributes hast Du Dir ja gemerkt. Anschließend weitersuchen und das ganze Spiel von vorne bis zum Textende.
jackie05 - Fr 12.12.08 05:48
Ich habs mal so versucht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.Button1Click(Sender: TObject); var StartTag, EndTag: integer; begin MSG := RichEdit2.Text;
while (Pos('[F]', MSG) > 0) do begin StartTag := Pos('[F]', MSG); Delete(MSG, StartTag, 3); EndTag := Pos('[/F]', MSG); Delete(MSG, EndTag, 4); RichEdit1.Text := MSG; RichEdit1.SelStart := StartTag-1; RichEdit1.SelLength := EndTag-StartTag; RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style + [fsBold]; end; end; |
Dieses beispiel sucht nach dem anfangs Tag [F] und dem Ende Tag und das wird dann Fett dargestellt.
Aber so funktioniert das nicht, es wird immer das letzte Fett dargestellt, was ein [F] Tag hat.
Das problem liegt daran, das nach jeder Schleifen Durchlauf der gesamte Text wieder ins RichEdit übergeben wird, somit verliert die davor definierte Text Attribute...
Wie könnte ich das ambesten lösen?
MfG
martin300 - Fr 12.12.08 11:34
Hallo,
die Lösung verwendet deinen Code. Du wirst sie aber sicher
noch ändern müssen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure TForm1.Button1Click(Sender: TObject);
var StartTag, EndTag: integer; I: Integer; aktuelleZeile: String; summe : Integer; begin summe:= 0; for I := 0 to Richedit2.lines.count-1 do begin aktuelleZeile:= RichEdit2.Lines[i]; StartTag := Pos('[F]', aktuelleZeile); Delete(aktuelleZeile, StartTag, 3); EndTag := Pos('[/F]', aktuelleZeile); Delete(aktuelleZeile, EndTag, 4); RichEdit1.Lines[i] := aktuelleZeile; RichEdit2.Lines[i] := aktuelleZeile; RichEdit2.SelStart := summe; RichEdit2.SelLength := summe+EndTag-StartTag; RichEdit2.SelAttributes.Style := RichEdit2.SelAttributes.Style + [fsBold]; summe := length(aktuelleZeile) + summe; end; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!