Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Farbe in Zeilen eines RichEdits (https://www.delphipraxis.net/29585-farbe-zeilen-eines-richedits.html)

Matze 11. Sep 2004 10:19


Farbe in Zeilen eines RichEdits
 
Hi!

Ich möchte z.B. die ersten 3 zeichen eines RichEdits farbig haben. Mit SelStart und SelLength komme ich nicht weiter, dann habe ich es so versucht:

Delphi-Quellcode:
  RichEdit1.SelAttributes.Color := clRed;
  RichEdit1.Text := '123';
  RichEdit1.SelAttributes.Color := clBlack;
  RichEdit1.Text := RichEdit1.Text + ' was schwarzes'; }
  RichEdit1.Lines.Add('');
Das geht aber auch nicht, wie mache ich denn sowas?
In der DP gibt es nur Threads, die mich nicht weiterbringen...

toms 11. Sep 2004 10:28

Re: Farbe in Zeilen eines RichEdits
 
Hi,

Das geht so:

Delphi-Quellcode:
  RichEdit1.Text := '123';
  RichEdit1.SelStart := 0;
  RichEdit1.SelLength := 2;
  RichEdit1.SelAttributes.Color := clRed;

  RichEdit1.Text := RichEdit1.Text + ' was schwarzes';
  RichEdit1.SelStart := 4;
  RichEdit1.SelLength := Length(RichEdit1.Text);
  RichEdit1.SelAttributes.Color := clBlack;

  RichEdit1.Lines.Add('');

Matze 11. Sep 2004 11:41

Re: Farbe in Zeilen eines RichEdits
 
Ach so muss ich das machen, da hätt ich echt selbst drauf kommen können. :wall:

Herzlichen Dank toms. :thumb:

Matze 11. Sep 2004 11:56

Re: Farbe in Zeilen eines RichEdits
 
ABer das:

Delphi-Quellcode:
  RichEdit1.Text := RichEdit1.Text + '123';
  RichEdit1.SelStart := 0;
  RichEdit1.SelLength := 2;
  RichEdit1.SelAttributes.Color := clRed;

  RichEdit1.Text := RichEdit1.Text + ' was schwarzes';
  RichEdit1.SelStart := 4;
  RichEdit1.SelLength := Length(RichEdit1.Text);
  RichEdit1.SelAttributes.Color := clBlack;

  RichEdit1.Lines.Add('');
funktioniert nicht ganz, da hinterher der ganze Text nur schwarz dargestellt wird.
Dann müsste ich ja immer die Länger der letzten Zeile auslesen, was dann schon komplizierter bei einem Zeilenumbruch ist, nehme ich an.

Gibt es da nicht's, wo ich nur die einzelnen Zeilen ansprechen kann?

TStringlist 11. Sep 2004 17:29

Re: Farbe in Zeilen eines RichEdits
 
Wenn du so RichEdit1.Text lädst, dann lädst du ja jedesmal den gesamten Text von RichEdit immer wieder neu ...also werden Format-Informationen, die da mit dem alten Text assoziiert waren, auch jedesmal wieder mit überschrieben, also gelöscht. Und das RichEdit1.Text auf der rechten Seite der Zuweisung ist dann natürlich auch wieder nur ein normaler String ohne Format-Infos.


Wenn du nur eine einzelne Zeile ansprechen willst, könnte das ungefähr so aussehen:

Delphi-Quellcode:
procedure markLineNo(LineIndex : integer; clColor : TColor; MarkLen : integer = 0);
begin
  with form1.RichEdit1 do begin
    SelStart := Perform(EM_LINEINDEX,LineIndex,0);
    if MarkLen = 0 then SelLength := Perform(EM_LINELENGTH,SelStart,0)
                   else SelLength := MarkLen;
    SelAttributes.Color := clColor;
  end;
end;
Bei fehlendem MarkLen-Wert in der übergebenden Parameterliste würde dann die gesamte Zeile markiert.

Matze 11. Sep 2004 18:07

Re: Farbe in Zeilen eines RichEdits
 
Vielen Dank, funktioniert bestens :thumb:
Hab's so umgebaut:

Delphi-Quellcode:
procedure MarkLineNo(LineIndex : integer; clColor : TColor; Start, Length: integer);
begin
  with form1.RichEdit1 do begin
    SelStart := Perform(EM_LINEINDEX, LineIndex, 0) + Start;
    SelLength := Length;
    SelAttributes.Color := clColor;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:42 Uhr.

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