Autor Beitrag
jackie05
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: Do 11.12.08 04:20 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: Do 11.12.08 10:54 
Hallo,
eine Möglichkeit wäre
ausblenden Delphi-Quelltext
1:
2:
3:
4:
RichEdit1.SelStart := 0;
RichEdit1.SelLength := 5;
RichEdit1.SelAttributes.Color := clRed;
RichEdit1.SelAttributes.Style := [fsbold];
jackie05 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: 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
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: Fr 12.12.08 05:48 
Ich habs mal so versucht:
ausblenden 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) > 0do 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: Fr 12.12.08 11:34 
Hallo,
die Lösung verwendet deinen Code. Du wirst sie aber sicher
noch ändern müssen.
ausblenden 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;