AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TRichEdit

Ein Thema von youuu · begonnen am 26. Feb 2009 · letzter Beitrag vom 27. Feb 2009
Antwort Antwort
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#1

TRichEdit

  Alt 26. Feb 2009, 22:37
Hallo,

Ich habe eine Frage bezüglich den einfärben in einem TRichEdit Feldes.
Und zwar hier ein Teil meines Quellcodes.

Delphi-Quellcode:
           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;
Nun soll jedesmal wenn ich im TRich-Feld etwas einfüge das einen höheren Wert als 2 besitzt Rot eingefärbt werden.

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?
Miniaturansicht angehängter Grafiken
delphi_151.jpg  
Steven
  Mit Zitat antworten Zitat
blink182

Registriert seit: 19. Jun 2007
126 Beiträge
 
Delphi 5 Standard
 
#2

Re: TRichEdit

  Alt 26. Feb 2009, 22:58
Delphi-Quellcode:
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;
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.
Hier wirds aber auch nochmal genau erklärt http://www.swissdelphicenter.ch/torr...de.php?id=1129
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#3

Re: TRichEdit

  Alt 27. Feb 2009, 19:13
Ich habe dies nun so eingebaut:

Delphi-Quellcode:

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;
Habe mit Absicht den Teil mit Lines.add weggelassen da ich dies woanderst realisiert habe und zwar hier:

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:

      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;
Dort klappte der Zeilenumbruch wieder.

Ich bin total Ratlos oder ich mache irgendwo einen dummen Fehler
Miniaturansicht angehängter Grafiken
ohne_color_168.jpg   mit_color_126.jpg  
Steven
  Mit Zitat antworten Zitat
blink182

Registriert seit: 19. Jun 2007
126 Beiträge
 
Delphi 5 Standard
 
#4

Re: TRichEdit

  Alt 27. Feb 2009, 19:23
Delphi-Quellcode:
FormMain.REAErgebnis.Lines[FormMain.REAErgebnis.Lines.Count -1] := FormMain.REAErgebnis.Lines[FormMain.REAErgebnis.Lines.Count -1]
      + Text;
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)

Vllt solltest du auch wenn du es nicht mehr färben willst auch den Text irgendwo in schwarz wieder geben.

Delphi-Quellcode:
if StrToFloat(Ergebnis[A]) > 2 then
   AddColoredText(Test,clblue)
else
   AddColoredText(Test,clBlack);
inc(A);
Das RichEdit behält wohl die Farbe dann bei
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#5

Re: TRichEdit

  Alt 27. Feb 2009, 19:45
Danke erstmal für deine Tipps hab nun

Delphi-Quellcode:

if StrToFloat(Ergebnis[A]) > 2 then
  Begin
    AddColoredText(Test,clblue);
  End
else
  AddColoredText(Test,clBlack);
eingebaut sowie

Delphi-Quellcode:

if NewLn then
  begin
    FormMain.REAErgebnis.Lines.Add(Text);
  end
Nun funktioniert es auch HALBWEGS.

Er färbt nun die richtigen Zeilen ein doch mit ab und zu ein paar Fehlern :/

Ich habe natürlich ein screenshot angehangen
Miniaturansicht angehängter Grafiken
kleine_fehler_156.jpg  
Steven
  Mit Zitat antworten Zitat
blink182

Registriert seit: 19. Jun 2007
126 Beiträge
 
Delphi 5 Standard
 
#6

Re: TRichEdit

  Alt 27. Feb 2009, 20:05
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
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#7

Re: TRichEdit

  Alt 27. Feb 2009, 20:19
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
Miniaturansicht angehängter Grafiken
muster_150.jpg  
Steven
  Mit Zitat antworten Zitat
blink182

Registriert seit: 19. Jun 2007
126 Beiträge
 
Delphi 5 Standard
 
#8

Re: TRichEdit

  Alt 27. Feb 2009, 21:27
Die Schweizer helfen^-^ http://www.swissdelphicenter.ch/torr...de.php?id=1129

Delphi-Quellcode:
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;
hoffe das klappt
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#9

Re: TRichEdit

  Alt 27. Feb 2009, 22:18
Zitat von blink182:
Die Schweizer helfen^-^ http://www.swissdelphicenter.ch/torr...de.php?id=1129

Delphi-Quellcode:
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;


hoffe das klappt

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
Steven
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 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