Autor Beitrag
Lui
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 84

Win XP, Win 2000, Linux
D7
BeitragVerfasst: Di 29.10.02 19:42 
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

_________________
Während der C Progga sich fragt wie er es machen soll, fragt der Delphi Progga sich was soll ich machen...
O'rallY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: 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:

ausblenden volle Höhe 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!)

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
Lui Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 84

Win XP, Win 2000, Linux
D7
BeitragVerfasst: 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

_________________
Während der C Progga sich fragt wie er es machen soll, fragt der Delphi Progga sich was soll ich machen...
O'rallY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: 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):
ausblenden 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.

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...