![]() |
TRichEdit
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Ich habe eine Frage bezüglich den einfärben in einem TRichEdit Feldes. Und zwar hier ein Teil meines Quellcodes.
Delphi-Quellcode:
Nun soll jedesmal wenn ich im TRich-Feld etwas einfüge das einen höheren Wert als 2 besitzt Rot eingefärbt werden.
FormMain.REAErgebnis.lines.Add(Test);
if StrToFloat(Ergebnis[A]) > 2 then Begin with FormMain.REAErgebnis do begin SelStart := Length(FormMain.REAErgebnis.text)-Length(Test); SelLength := Length(Test); SelAttributes.Color := clRed; end; End; nur bei diesem Code den ich mir zusammen gebastelt habe klappt dies nicht. Auf dem Screenshot kann man genau sehen wie es jedesmal aussieht. Screenshot hängt bei. Hat jemand einen Tipp was ich falsch mache? |
Re: TRichEdit
Delphi-Quellcode:
probier die Prozedur mal, damit kannst du einzelne Teile einer Reihe färben oder halt die ganze Reihe, je nach dem was du der Konstanten zuweißt.
procedure AddColoredText(Text: String; Color: TColor; const
NewLn: Boolean = true); begin if NewLn then begin Form1.RIchEdit1.Lines.Add(Text); end else begin Form1.RIchEdit1.Lines[Form1.RIchEdit1.Lines.Count -1] := Form1.RIchEdit1.Lines[Form1.RIchEdit1.Lines.Count -1] + Text; end; Form1.RIchEdit1.SelStart := Length(Form1.RIchEdit1.Lines.Text) -2 -Length(Text); Form1.RIchEdit1.SelLength := Length(Text); Form1.RIchEdit1.SelAttributes.Color := Color; Form1.RIchEdit1.SelLength := 0; Form1.RIchEdit1.SelStart := Length(Form1.RIchEdit1.Lines.Text); end; Hier wirds aber auch nochmal genau erklärt ![]() |
Re: TRichEdit
Liste der Anhänge anzeigen (Anzahl: 2)
Ich habe dies nun so eingebaut:
Delphi-Quellcode:
Habe mit Absicht den Teil mit Lines.add weggelassen da ich dies woanderst realisiert habe und zwar hier:procedure AddColoredText(Text: String; Color: TColor; const NewLn: Boolean = true); begin begin FormMain.REAErgebnis.Lines[FormMain.REAErgebnis.Lines.Count -1] := FormMain.REAErgebnis.Lines[FormMain.REAErgebnis.Lines.Count -1] + Text; end; FormMain.REAErgebnis.SelStart := Length(FormMain.REAErgebnis.Lines.Text) -2 -Length(Text); FormMain.REAErgebnis.SelLength := Length(Text); FormMain.REAErgebnis.SelAttributes.Color := Color; FormMain.REAErgebnis.SelLength := 0; FormMain.REAErgebnis.SelStart := Length(FormMain.REAErgebnis.Lines.Text); end;
Delphi-Quellcode:
for I := 0 to 4 do Begin for E := 0 to 4 do Begin Test:= IntToStr(I) +':' + IntToStr(E) +' zu '+(Ergebnis[A])+' %'; FormMain.REAErgebnis.lines.Add(Test); if StrToFloat(Ergebnis[A]) > 2 then Begin AddColoredText(Test,clblue); // <<<<------ End; A:= A + 1; End; End; allerdings auch kein Erfolg siehe Screenshot :( (sogar der Zeilenumbruch klappte danach komischerweise nciht mehr) Hier ein einmal der Quelltest als ich Die Color procedure rausgenommen habe + Screenshot
Delphi-Quellcode:
Dort klappte der Zeilenumbruch wieder.for I := 0 to 4 do Begin for E := 0 to 4 do Begin Test:= IntToStr(I) +':' + IntToStr(E) +' zu '+(Ergebnis[A])+' %'; FormMain.REAErgebnis.lines.Add(Test); A:= A + 1; End; End; Ich bin total Ratlos oder ich mache irgendwo einen dummen Fehler ;) |
Re: TRichEdit
Delphi-Quellcode:
das sollte ja auch gemacht werden, wenn keine neue Zeile gewollt ist, d.h. er springt an die letzte position aus der zeile davor und fügt es ein. Ich denke das willst du ja auch nicht. MIt dem lines.add war somit der Zeilenumbruch gegeben, also die Zeile nur aufrufen wenn NewLn=false und bei dir ist es ja standardmässig auf true also fügt der es einfach ans Ende. Also das kannst du weglassen, aber dann lieber FormMain.ReaErgebnis.Lines.add(Text)
FormMain.REAErgebnis.Lines[FormMain.REAErgebnis.Lines.Count -1] := FormMain.REAErgebnis.Lines[FormMain.REAErgebnis.Lines.Count -1]
+ Text; Vllt solltest du auch wenn du es nicht mehr färben willst auch den Text irgendwo in schwarz wieder geben.
Delphi-Quellcode:
Das RichEdit behält wohl die Farbe dann bei
if StrToFloat(Ergebnis[A]) > 2 then
AddColoredText(Test,clblue) else AddColoredText(Test,clBlack); inc(A); |
Re: TRichEdit
Liste der Anhänge anzeigen (Anzahl: 1)
Danke erstmal für deine Tipps hab nun
Delphi-Quellcode:
eingebaut sowieif StrToFloat(Ergebnis[A]) > 2 then Begin AddColoredText(Test,clblue); End else AddColoredText(Test,clBlack);
Delphi-Quellcode:
Nun funktioniert es auch HALBWEGS.if NewLn then begin FormMain.REAErgebnis.Lines.Add(Text); end Er färbt nun die richtigen Zeilen ein doch mit ab und zu ein paar Fehlern :/ Ich habe natürlich ein screenshot angehangen ;) |
Re: TRichEdit
so einen ähnlichen fehler hatte ich auch mal, hatte da "Pfeile" --> schwarz färben wollen, aber diese Pfeile haben die Farbe von dem Zeichen davor angenommen, da konnte ich noch so viele schwarze-Farbe-Befehle anwenden, es hat nicht funktioniert, das liegt wohl irgendwie am RichEdit an sich, frag mich nicht warum und wieso. Abhilfe wirst du wahrscheinlich bekommen, wenn du erst später die Zeilen färbst, d.h. wenn alle Linien gefüllt sind. Aber kA ob das bei deinem Programm möglich ist also ob dann noch der Sinn gewahrt bleibt.
MfG blink182 |
Re: TRichEdit
Liste der Anhänge anzeigen (Anzahl: 1)
Machbar und Sinn würde es noch machen, nur wie realisier ich das dann?
mit den gleichen Befehlen? Hättest du da einen kleinen code schnipsel zur verfügung? Edit: Ich habe es grad auch probiert nur mit dem Prozentwert ohne Prozent Zeichen oder anderen Schnick Schnack also nur die Zahl an sich. Selbst dann bleibt der Fehler bestehen ;/ Edit2: Ich meine da ist sehr gut sogar ein Muster zu erkennen Screenshot angehangen ;) |
Re: TRichEdit
Die Schweizer helfen^-^
![]()
Delphi-Quellcode:
hoffe das klappt :)
procedure RE_ColorLine(ARichEdit: TRichEdit; ARow: Integer; AColor: TColor);
begin with ARichEdit do begin SelStart := SendMessage(Handle, EM_LINEINDEX, ARow - 1, 0); SelLength := Length(Lines[ARow -1]); SelAttributes.Color := AColor; SelLength := 0; end; end; procedure TForm1.Button1Click(Sender: TObject); var i:integer; s:string; begin for i:=0 to RichEdit1.lines.count-1 do begin s:=strtoint(RichEdit1.lines[i]); s:=copy(s,Pos(' zu ',s)+length(' zu ')+1,length(s)); s:=copy(s,1,Pos('%',s)-1); // hier bin ich mir nicht sicher ob die -1 dahin gehört, glaub aber schon, sollte soweit dann an deine Zeile angepasst sein //s:=Stringreplace(s,'.',#40,[]); hab gerade nochmal geschaut, dass ist ja schon ein Komma ;) if strtofloat(s)>2 then begin RE_ColorLine(RichEdit1,i+1,clred); richEdit1.selattributes.color:=clblack; // das hier braucht man glaub ich auch nicht end end end; |
Re: TRichEdit
Zitat:
Es hat perfekt geklappt ;) Danke hast allerdings einen kleinen Fehler gehabt und zwar hier s:=strtoint(RichEdit1.lines[i]); s ist doch ein string und du wolltest ein integer Wert zuweisen. :) Ich danke dir abe rnochmal für deine nette Hilfe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:58 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