Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi RichEdit-Formatierung (https://www.delphipraxis.net/21017-richedit-formatierung.html)

faux 26. Apr 2004 19:28


RichEdit-Formatierung
 
Hallo...
ich hab mir jetzt alles mit der Delphisuche gesucht was ich unter Hier im Forum suchenRichEdit gefunden habe, aber ich kappiers nicht...

wen ich die folgende funktion aufrufe, funktioniert das zwar, aber es wird nur der erste übereinstimmende text gefärbt:

Delphi-Quellcode:
procedure TForm1.Colorizen(RichEdit: TRichEdit; const Msg: String; Color: TColor);
begin
  //RichEdit.Lines.Add(Msg);
  RichEdit.SelStart := Pos(Msg, RichEdit.Text) - 1;
  RichEdit.SelLength := Length(Msg);
  RichEdit.SelAttributes.Color := Color;
  RichEdit.SelLength := 0;
end;
bitte um hile, ich will das JEDER text (in der Prozedur Msg) im ganzen RichEdit gefärbt wird....

alcaeus 26. Apr 2004 19:32

Re: RichEdit-Formatierung
 
Pos sucht dir das erste Vorkommen von Msg. Wenn du alle färben willst, musst du es wahrscheinlich so machen:
Delphi-Quellcode:
for i := 1 to Length(RichEdit.Text)-Length(Msg)+1 do
begin
  if Copy(RichEdit.Text,i,Length(Msg) = Msg then
  begin
    RichEdit.SelStart := i-1;
    RichEdit.SelLength := Length(Msg);
    RichEdit.SelAttributes.Color := Color;
    RichEdit.SelLength := 0;
  end;
end;

himitsu 26. Apr 2004 19:38

Re: RichEdit-Formatierung
 
Oder Schau dir mal PosEx (siehe OH) an, damit kann man ab 'ner bstimmten Position suchen also wenn was gefunden wurde, dann einfach nach dieser Position weitersuchen.

SirThornberry 26. Apr 2004 20:41

Re: RichEdit-Formatierung
 
Sollte dann in etwa so aussehen
Delphi-Quellcode:
procedure TForm1.Colorizen(RichEdit: TRichEdit; const Msg: String; Color: TColor);
var LStartpos, LFoundpos: Integer;
begin
  LStartpos := 1;
  repeat
    LFoundpos := PosEx(Msg, RichEdit.Text, LStartpos);
    if LFoundpos > 0 then
    begin
      RichEdit.SelStart := PosEx(Msg, RichEdit.Text, LStartpos) - 1;
      RichEdit.SelLength := Length(Msg);
      RichEdit.SelAttributes.Color := Color;
      RichEdit.SelLength := 0;
      LStartpos := LFoundpos + length(Msg);
    end;
  until LFoundpos <= 0;
end;

faux 27. Apr 2004 18:58

Re: RichEdit-Formatierung
 
Zitat:

Zitat von alcaeus
Delphi-Quellcode:
for i := 1 to Length(RichEdit.Text)-Length(Msg)+1 do
begin
  if Copy(RichEdit.Text,i,Length(Msg) = Msg then //Inkompatible Typen: 'String' und 'Integer'
  begin
    RichEdit.SelStart := i-1;
    RichEdit.SelLength := Length(Msg);
    RichEdit.SelAttributes.Color := Color;
    RichEdit.SelLength := 0;
  end;
end;


himitsu 27. Apr 2004 19:44

Re: RichEdit-Formatierung
 
Da fehlt nur 'ne Klammer ;)

Code:
for i := 1 to Length(RichEdit.Text)-Length(Msg)+1 do
begin
  if Copy(RichEdit.Text,i,Length(Msg)[color=red][b])[/b][/color] = Msg then
  begin

p0w3r5tr34m3r 28. Apr 2004 12:35

Re: RichEdit-Formatierung
 
dies bezüglich hätte ich auch noch ne frage...
wenn ich in nem String mehrere markierungen habe ([ und ]) soll der text zwischen diesen klammern
rot geschrieben werden... das funkt soweit auch.. aber.. wie bekomm ich das hin das mein Prog das
bei allen Klammern macht ?

bei den ersten Klammern hab ich das schon mit Pos('[',msg) und Pos(']',msg) erledigen können aber
wie muss ich weiter machen ?

Für das bessere Verständnis:

Guten Tag [anrede] [vorname] [nachname]

soll zu

Guten Tag [anrede] [vorname] [nachname]

werden.

THX 4 HELP
p0w3r5tr34m3r

himitsu 28. Apr 2004 12:47

Re: RichEdit-Formatierung
 
Nimm einfach PosEx, damit kann man ab 'ner bestimmten Position suchen.

Für PosEx gibt es hier im Forum auch ein paar nette Beispiele.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz