Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - RichEdit und es klappt doch nicht...
Lui - Di 29.10.02 19:42
Titel: RichEdit und es klappt doch nicht...
Hi,
hab einen chat geproggt mit server-client Verbindung, EditFelder zur Eingabe,...und zur Ausgabe eine RichEdit Komponente.
Ich will die Namen (z.B. GUEST, ADMIN, CHATTER,...) Die am Anfang der REdit stehen farbig vom Rest abheben. Dabei möchte ich bestimmte Wörter in verschiedenen Farben darstellen:
('GUEST' := clred, 'ADMIN' := clblue, usw....)
Der geschriebene Text soll einfarbig bleiben. Ich hab viel Versucht(muss dazu sagen hab auch nicht wirklich die Ahnung von Delphi) SelText oder so aber ich schaffs nicht... :(
Kann mir jemand einen kleinen source geben?
Wäre sehr dankbar!
MfG
Lui
O'rallY - Di 29.10.02 20:56
Ich hab mir mal vor einiger Zeit ne Unit geschrieben um genau dies zu vereinfachen. Ich denke 's wird dir helfen:
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: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| unit REUtils;
interface
uses ComCtrls, Graphics;
procedure AddLine(Text: string; color: TColor; RE: TRichEdit); procedure AddText(Text: string; color: TColor; RE: TRichEdit);
implementation
procedure AddLine(Text: string; color: TColor; RE: TRichEdit); begin
RE.Lines.Add(Text); RE.SelStart := RE.SelStart - Length(Text) - 2; RE.SelLength := Length(Text);
if copy(RE.SelText, 1, 1) = #13 then begin RE.SelStart := RE.SelStart + 2; RE.SelLength := Length(Text); end;
RE.SelAttributes.Color := color; end;
procedure AddText(Text: string; color: TColor; RE: TRichEdit); begin RE.Lines[RE.Lines.Count - 1] := RE.Lines[RE.Lines.Count - 1] + Text; RE.SelStart := RE.SelStart - Length(Text); RE.SelLength := Length(Text); RE.SelAttributes.Color := color; RE.SelStart := RE.SelStart + Length(Text); end;
end. |
Benutzung dürfte klar sein, falls nicht poste einfach. (Ich hoffe es hat sich kein Fehler eingeschlichen!)
Lui - Di 29.10.02 21:17
Titel: Danke
Aha,
ne menge unbekannter code für mich, muss mich erst mal durchlesen...
Also im ersten Teil ermittelst Du die Text länge, ja? Nee, mhhh....
Wenn ich mir das so als rookie anschaue, versteh ich leider nicht viel.
Kann ich so "Konstante Strings" (GUEST, CHATTER,...) farblich darstellen?
Geht das nicht auch kompakter?
Es muß doch möglich sein konstanten zu deklarieren die im Gegensatz zum restlichen Text andersfarbig dargestellt werden...ohne eine eigene Unit dafür?!? Wenn ich Müll von mir gebe korrigiert mich bitte, bin wie schon geschrieben nicht sehr eingearbeitet in Delphi.
Auf jeden Fall schonmal DAnke für deinen source und die schnelle Antwort!
Arghhh...viel zu viel geschrieben und gefragt...sorry aber blick da nicht ganz durch. :roll:
MfG
Lui
O'rallY - Di 29.10.02 22:15
Lui hat folgendes geschrieben: |
Geht das nicht auch kompakter? |
Ja, es geht bestimmt noch kompakter, auf jedenfall kann man es deinen Wünschen besser anpassen, doch ist dies einfach ein universeller Code, den man eigentlich für alles benutzen kann. Das Prinzip ist total einfach (hier mal n bissl optimirter Code, dass was ich unten geschrieben hab ist unnötig):
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| ... RE.Lines.Add(Text); //ist ja klar, Text wird geschrieben RE.SelStart := RE.SelStart - Length(Text) - 2; {setzt Cursor vor das geschriebene Wort, setzt allerdings voraus, das der Cursor auch am Textende ist, deswegen wäre folgendes sicherer}
RE.SelStart := Length(RE.Text) - Length(Text) - 2; //dies sollte verwendet werden { - 2 -> da jeder Zeilenumbruch zwei Zeichen lang ist (#13#10)}
RE.SelLength := Length(Text); //'Text' wird markiert RE.SelAttributes.Color := color; //'Text' wird eingefärbt ... |
Aber wie schon gesagt, du solltest das ganze mal nochmal überarbeiten. Auf jedenfall solltest du jetzt verstehen, wie es zu machen ist :wink: .
Um 'HALLO' immer rot zu schreiben, könntest du im OnChange-Event des TRichEdit den Text auf dieses Wort durchsuchen (mittels
RichEdit1.FindText, informationen darüber findest du im Forum und in der Hilfe) und dann das Wort einfärben.
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!