RichEdit - kolorowanie nowych linii

1

Mam taką procedurkę:

procedure koloruj(tekst:string;tekst2:string);
begin
  FF.RichEdit.Lines.Add(tekst+tekst2);
  FF.RichEdit.SelStart:=0;
  FF.RichEdit.SelLength:=Length(tekst);
  FF.RichEdit.SelAttributes.Color:=clBlue;
  FF.RichEdit.SelStart:=length(tekst);
  FF.RichEdit.SelLength:=length(tekst2);
  FF.RichEdit.SelAttributes.Color:=clGreen;
end;

Odwołuję się do niej w taki sposób:

koloruj('Dane: ','Imie i nazwisko');

Powinno się pojawić tak, że **Dane: ** będzie kolorem niebieskim, a Imie i nazwisko kolorem zielonym. No i wszystko pięknie działa - aż do dodania 2 linijki. Wtedy już nic nie koloruje. Domyślam się, że trzeba od nowa zaznaczyć odkąd ma kolorować itd, ale próbowałem kilka sposobów i gubiło mi kolory. Może ktoś wie jak to dokończyć?

0

Tu jest problem

 FF.RichEdit.SelStart:=0;
0

Nie myślisz tylko klepiesz kod "na pałę" dlatego minusuje jak słuszcznie zrobił to też ktoś przedemna. Ech, masz gotowca i tak się pewnie nic nie nauczysz. Może da się inaczej, a raczej na pewno da się inaczej, ale tak wklepałem na szybkiego. Poza tym, jeżeli zmieniasz RichEdit na jakiejś formatce to może lepiej by ta procedura była w kodzie klasy tej formatki, wtedy obędzie się bez jednego with ... do ....

procedure Koloruj(Tekst, Tekst2 : string);
begin
  with FF do
  begin
    with RichEdit do
    begin
      Lines.Add(Tekst + Tekst2);
      if Lines.Count = 0 then
      begin
        SelStart := 0;
      end
      else
      begin
        SelStart := Length(Text) - Length(Tekst + Tekst2) - 2;
      end;
      SelLength := Length(Tekst);
      SelAttributes.Color := clBlue;
      if (Lines.Count = 1) then
      begin
        SelStart := Length(Tekst);
      end
      else
      begin
        SelStart := Length(Text) - Length(Tekst2) - 2;
      end;
      SelLength := Length(Tekst2);
      SelAttributes.Color := clGreen;
    end;
  end;
end;
0

Dzięki olesio za pomoc :). Niestety - podobny kod sam stworzyłem wcześniej (i również dawałem to -2 itd.), ale również tak jak ten - nie działa. Wynik:
user image
Ja wiem, że problem tkwi w SelStart, ale za nic nie wiem w czym jest błąd... Próbowałem również mnożyć, dodawać itd. ale nadal nie działa tak jak powinno...

0

Kod olesia jest dobry aczkolwiek można go skrócić, np

procedure Koloruj(Tekst, Tekst2 : string);
begin
  with FF do with RichEdit do
  begin
    Lines.Add(Tekst + Tekst2);
    SelStart := Length(Text) - Length(Tekst + Tekst2) - 2;
    SelLength := Length(Tekst);
    SelAttributes.Color := clBlue;
    SelStart := SelStart+SelLength;
    SelLength := Length(Tekst2);
    SelAttributes.Color := clGreen;
  end;
end;

To ty coś źle robisz. Może źle przepisałeś?

0

Dobrze "przepisałem" :). Problem jednak nie tkwi w kodzie a w wersji Delphi. Sprawdziłem na Delphi 7 - działa. Jednak na Delphi 2010 wyświetla tak, jak na podanym wcześniej prze zemnie obrazku. Co może być przyczyną? Zależy mi, aby chodziło to na Delphi 2010.

0

a cos takiego?

procedure Koloruj(Tekst, Tekst2 : string);
begin
  with FF do with Richedit do
  begin
    SelAttributes.Color:=clRed;
    SelText:=Tekst;
    SelAttributes.Color:=clBlue;
    SelText:=Tekst2+#13#10;
  end;
end;

zrodlo: google > http://4programmers.net/Forum/C_i_.NET/169891-richtextbox_-_dodawanie_dwukolorowego_tekstu

0

Teraz działa :). Dzięki wszystkim za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1