![]() |
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 |
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:
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.
RichEdit.SelStart:=StartWert;
RichEdit.SelLength:=LängeDesZuFärbendenBereichs; RichEdit.SelAttributes.Color:=clRed; 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. |
Re: Richedit Farbe ?
Na ungefähr so:
Delphi-Quellcode:
Da es aber besser wäre die Sache in Paint-Event zu machen ist es besser auch hier eine eigene Klasse abzuleiten...
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; |
Re: Richedit Farbe ?
jawohl, genau das habe ich gesucht,
herzlichen dank ! mfg vader |
Re: Richedit Farbe ?
@turboPASCAL: Bei mir läuft das nicht, bei mir werden alle Zeilen rot markiert.
|
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. |
Re: Richedit Farbe ?
Hallo,
Zitat:
Code:
Length(RichEdit1.Text) = incl. #13#10
Length(Richedit1.Lines[0]) = #13#10 ist nicht enthalten |
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:
wie muß ich das ändern ?
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; mfg vader |
Re: Richedit Farbe ?
Zitat:
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 = ... ... |
Re: Richedit Farbe ?
hallo turboPASCAL,
alles klar, war ein denkfehler, danke nocheinmal mfg vader |
Re: Richedit Farbe ?
noch eine frage,
kann man auch die schriftgröße bestimmen ?
Delphi-Quellcode:
das geht aber nicht ?
Richedit.SelAttributes.font.size := 8;
mfg vader |
Re: Richedit Farbe ?
Auch das geht:
Delphi-Quellcode:
RE = Richedit ;)
procedure ...
begin cp := RE.CaretPos; RE.Selstart := 0; RE.Sellength := //... RE.SelAttributes.color := clRed; RE.SelAttributes.Size := 12; // <---<<< RE.Selstart := 0; RE.CaretPos := cp; RE.SelAttributes.Size := RE.Font.Size; // Zurücksetzen der Schriftgrösse RE.SelAttributes.Color := RE.Font.Color; // Zurücksetzen der Schriftfarbe end; |
Re: Richedit Farbe ?
hallo,
danke das geht,jetzt habe ich noch ein problem, und zwar ich habe auf meiner form einige richedit's plaziert, in der laufzeit habe ich dort dann was reinkopiert, jetzt wollte ich einen ausdruck von der form machen
Delphi-Quellcode:
siehe da, der reinkopierte text in den richedit's wird nicht mitausgedruckt ?
form1.print;
wie ist das möglich,und wie kann ich das anderes lösen ? mfg vader |
Re: Richedit Farbe ?
Mach bitte dazu einen neuen Thread auf.
|
Re: Richedit Farbe ?
hallo,
Delphi-Quellcode:
der code bezieht sich ja auf die zeichen der lines, geht das nicht das sich Richedit.selstart direkt auf
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; die zeilen ( lines )bezieht, dann könnte ich sagen in der lines [8] soll die schriftfarbe rot sein ? mfg vader |
Re: Richedit Farbe ?
Hallo Vader,
gefällt dir das besser?
Delphi-Quellcode:
Grüße vom marabu
procedure SetLineColor(re: TRichEdit; const index: Integer; const cl: TColor);
begin if index < re.Lines.Count then begin re.SelStart := re.Perform(EM_LINEINDEX, index, 0); re.SelLength := Length(re.Lines[index]); re.SelAttributes.Color := cl; end; end; |
Re: Richedit Farbe ?
oder dieses ^^
Delphi-Quellcode:
umständlich aber es funzt auch ^^
procedure TForm1.Button1Click(Sender: TObject);
var i,Line,sz:integer; begin sz:=0; //-- sz Startzeichen Line:=strtoint(edit1.Text)-1; //-- (-1) weil Richedit Index bei 0 anfängt for i:=0 to Line do begin sz:=sz+length(richedit1.Lines[i])+2; //-- (+2) weil hinter jeder Line noch 2 nicht sichtbare Zeichen stehen end; richedit1.SelStart:=sz-length(richedit1.Lines[Line])-2; richedit1.SelLength:=length(richedit1.Lines[Line]); richedit1.SelAttributes.Color:=clred; end; mann kann es auch in ne procedure schreiben um dan mehrere zeilen zu makieren. mfg Xe0n |
Re: Richedit Farbe ?
hallo,
habe den aufruf so gemacht
Delphi-Quellcode:
jetzt ist die zeile 3 mit der schriftfarbe rot, sagt aber deine procedure auch wieviel zeilen dann
SetLineColor (richedit1, 3,clred);
rot sein sollen ?
Delphi-Quellcode:
das funzt nicht
SetLineColor (richedit1, 3,,2,clred);
mfg vader |
Re: Richedit Farbe ?
Guten Morgen Vader.
Du bist ja richtig anspruchsvoll. Pass auf die geänderte Signatur auf:
Delphi-Quellcode:
Freundliche Grüße vom marabu
procedure SetParaColor(re: TRichEdit; const cl: TColor;
const index: Cardinal; const count: Cardinal = 1); begin if (index < re.Lines.Count) and (count >= 1) then begin re.SelStart := re.Perform(EM_LINEINDEX, index, 0); re.SelLength := re.Perform(EM_LINEINDEX, index + count, 0) - re.SelStart; re.SelAttributes.Color := cl; end; end; |
Re: Richedit Farbe ?
hallo,
danke schön ihr seid alle super,sowie deine prozeduren wie auch die lösung von xeON ! mfg vader |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 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