RichEdit - kolorowanie nowych linii

RichEdit - kolorowanie nowych linii
1

Mam taką procedurkę:

Kopiuj
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:

Kopiuj
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ć?

Opi
  • Rejestracja:ponad 20 lat
  • Ostatnio:16 dni
  • Postów:1030
0

Tu jest problem

Kopiuj
 FF.RichEdit.SelStart:=0;
olesio
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
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 ....

Kopiuj
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;

Pozdrawiam.
cimak
czepne sie bo nie mam nic lepszego do roboty:) skróciłbym to o te 8 linijek z begin..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...

pelsta
  • Rejestracja:około 19 lat
  • Ostatnio:26 dni
  • Postów:819
0

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

Kopiuj
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ś?

KA
Raczej nie czuję że to wina nowych Delphi (może to mieć związek z Unicode) ale niestety mam tylko 7 więc nie sprawdzę.
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.

cimak
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 9 lat
  • Postów:1668
0

a cos takiego?

Kopiuj
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

edytowany 2x, ostatnio: cimak
pelsta
Bardzo ciekawe rozwiązanie!
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.