Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Richedit Farbe ? (https://www.delphipraxis.net/63846-richedit-farbe.html)

Vader 23. Feb 2006 17:40


Richedit Farbe ?
 
hallo,

ich möchte das die ersten 2 lines ( zeilen ) bei einen richedit automatisch eine rote schriftfarbe haben,
wenn ich dann einen 4 zeiligen test reinkopiere in der laufzeit des programmes !

ich hab die hilfe durchstöpert ohne erfolg, ich habe immer nur den definerten text mit
der definierten farbe gefunden,ich kopierer dann immer anderen text rein,kann mir jemand helfen ?

mfg vader

emteg 23. Feb 2006 18:12

Re: Richedit Farbe ?
 
ich hab jetzt nicht ganz genau verstanden was du meinst. Soweit ich das sehe, willst du, wenn ein text in das rich edit geschrieben wird, dass die ersten beiden zeilen des neuen textes rot werden.

Generell geht das so:
Delphi-Quellcode:
RichEdit.SelStart:=StartWert;
RichEdit.SelLength:=LängeDesZuFärbendenBereichs;
RichEdit.SelAttributes.Color:=clRed;
Um das SelStart rauszubekommen, musst du folgendes wissen: das ist die länge vom alten Text im RichEdit (Length(RichEdit.Text)) + für jede Zeile 2. Warum? Weil am ende jeder zeile ein #10#13 (=zeilenumbruch in windows) steht, was bei Length(RichEdit.Text) nicht mitgezählt wird.

Um das SelLength rauszufinden muss du ungefähr so vorgehen: du nimmst die alte anzahl der zeilen und vergleichst sie mit der neuen anzahl. Davon ziehst du 2 ab und du weißt, in welcher line dein neuer text anfängt. SelLength ist dann die länge von dieser zeile.

turboPASCAL 23. Feb 2006 18:13

Re: Richedit Farbe ?
 
Na ungefähr so:
Delphi-Quellcode:
procedure TForm.RicheditChange(Sender: TObject);
var
  cp: TPoint;
begin
  cp := Richedit.CaretPos;

  Richedit.selstart := 0;
  Richedit.SelLength :=
      Length(Richedit.Lines[0]) + 2 + // + 2 wegen dem #13#10 hinter einer Zeile
      Length(Richedit.Lines[1]) + 2 + //            -"-
      Length(Richedit.Lines[2]) + 2; //            -"-
  Richedit.SelAttributes.color := clRed;

  Richedit.selstart := 0;
  Richedit.CaretPos := cp;
  Richedit.SelAttributes.color := Richedit.Font.Color; // Zurücksetzen der Farbe
end;
Da es aber besser wäre die Sache in Paint-Event zu machen ist es besser auch hier eine eigene Klasse abzuleiten...

Vader 23. Feb 2006 19:13

Re: Richedit Farbe ?
 
jawohl, genau das habe ich gesucht,
herzlichen dank !
mfg vader

Nils_13 23. Feb 2006 19:14

Re: Richedit Farbe ?
 
@turboPASCAL: Bei mir läuft das nicht, bei mir werden alle Zeilen rot markiert.

turboPASCAL 23. Feb 2006 19:33

Re: Richedit Farbe ?
 
Dann hast du was falsch übernommen ? ;)

Das funktioniert nur beim einfügen von Text, bei der Eingabe von Text ist diese Methode nicht geeignet, da es ein wenig flackern wird...

Um die Farbe nach den drei Zeilen wieder zurückzusetzen habe ich oben den Code etwas hinzugefügt.

Lannes 23. Feb 2006 21:47

Re: Richedit Farbe ?
 
Hallo,
Zitat:

Zitat von emteg
...Um das SelStart rauszubekommen, musst du folgendes wissen: das ist die länge vom alten Text im RichEdit (Length(RichEdit.Text)) + für jede Zeile 2. Warum? Weil am ende jeder zeile ein #10#13 (=zeilenumbruch in windows) steht, was bei Length(RichEdit.Text) nicht mitgezählt wird.

das ist falsch, das Gegenteil ist richtig:
Code:
Length(RichEdit1.Text)    = incl. #13#10
Length(Richedit1.Lines[0]) = #13#10 ist nicht enthalten

Vader 24. Feb 2006 17:59

Re: Richedit Farbe ?
 
hallo turboPASCAL

das mit den ersten zwei zeilen funktioniert, jetzt wollte ich das die zeile 3 und 4 rot wird,
beim reinkopieren, aber das geht nicht, ich hab es so probiert

Delphi-Quellcode:
procedure TForm.RicheditChange(Sender: TObject);
var
  cp: TPoint;
begin
  cp := Richedit.CaretPos;

  Richedit.selstart := 3;
  Richedit.SelLength :=
      Length(Richedit.Lines[3]) + 2 + // + 2 wegen dem #13#10 hinter einer Zeile
      Length(Richedit.Lines[4]) + 2 + //            -"- 
      Length(Richedit.Lines[5]) + 2; //            -"- 
  Richedit.SelAttributes.color := clRed;

  Richedit.selstart := 3;
  Richedit.CaretPos := cp;
 
end;
wie muß ich das ändern ?
mfg vader

turboPASCAL 24. Feb 2006 18:43

Re: Richedit Farbe ?
 
Zitat:

Zitat von Vader
Code:
procedure TForm.RicheditChange(Sender: TObject);
var
  cp: TPoint;
begin
  cp := Richedit.CaretPos;

  Richedit.selstart := 3;
  [color=#ff001f]Richedit.SelLength[/color] :=
      [color=#ff001f]Length(Richedit.Lines[3]) + 2 + [/color]// + 2 wegen dem #13#10 hinter einer Zeile
      [color=#ff001f]Length(Richedit.Lines[4]) + 2 +[/color] //            -"- 
      [color=#ff001f]Length(Richedit.Lines[5]) + 2[/color]; //            -"- 
  Richedit.SelAttributes.color := clRed;

  Richedit.selstart := 3;
  Richedit.CaretPos := cp;
 
end;

???

Richedit.selstart := 3; Anfang der Selection beginnt bei dem drittem Zeichen und nicht Zeile im RE (Richedit) und dann die Zeichenanzahl aus Lines 3,4,5 ?

Alles klar ? Ist sicher ein Denkfehler, Selstart ist der Begin von dem ab plus N Zeichen die ausgewählt werden sollen. Schau dir es nochmal in der OH an... ;)

Code:
Selstart = Lines1+Lines2; // Begin der Selection nach dem letztem Zeichen in Zeile 2
Sellength = length(line3) // Anzahl der Zeichn in Line 3
SelAttributes = Rot
Selstart = ...
...

Vader 24. Feb 2006 19:18

Re: Richedit Farbe ?
 
hallo turboPASCAL,

alles klar, war ein denkfehler, danke nocheinmal
mfg vader


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:10 Uhr.
Seite 1 von 2  1 2      

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