2016-11-04 31 views
6

Używam TRichEdit, aby wyświetlić ostatnie operacje, które zostały wykonane w mojej aplikacji. Pierwsza linia mojej TRichEdit powinna być ostatnią operacją. Jeśli operacja się nie powiedzie, chciałbym umieścić tę linię na czerwono.Wstaw kolorową linię na górze TRichEdit

Mój problem polega na tym, że nie mogę wstawić kolorowej linii u góry mojego TRichEdit. Oto co próbowałem:

RichEditLog.SelAttributes.Color := clBlack; 
RichEditLog.Lines.Insert(0, 'Operation 1 OK'); 
// RichEditLog.Lines.Add('Operation 1 OK'); 

RichEditLog.SelAttributes.Color := clRed; 
RichEditLog.Lines.Insert(0, 'Operation 2 failed'); 
// RichEditLog.Lines.Add('Operation 2 failed'); 

RichEditLog.SelAttributes.Color := clRed; 
RichEditLog.Lines.Insert(0, 'Operation 3 failed'); 
// RichEditLog.Lines.Add('Operation 3 failed'); 

RichEditLog.SelAttributes.Color := clBlack; 
RichEditLog.Lines.Insert(0, 'Operation 4 OK'); 
// RichEditLog.Lines.Add('Operation 4 OK'); 

Problemem jest to, że moja TRichEdit zastosowanie tylko pierwsza zmiana koloru i zachować ją na wszystkich liniach. Jeśli użyję Add() zamiast Insert(), kolory będą się zmieniać, ale linia zostanie wstawiona na końcu mojego TRichEdit.

Moje pytanie brzmi: Czy istnieje łatwy sposób uzyskania wyników, których szukam?

+0

Wybór długości zerowej, określenie atrybutów selekcji, przypisanie do SelText. –

Odpowiedz

5

Musisz ustawić wybrany rozpoczęcia i długości do 0, jeśli chcesz umieścić na początku:

RichEditLog.SelStart := 0; 
RichEditLog.SelLength := 0; 
RichEditLog.SelAttributes.Color := clBlack; 
RichEditLog.Lines.Insert(0, 'Operation 1 OK'); 

Alternatywnie, zamiast RichEditLog.Lines.Insert() można przypisać tekst do RichEdit.SelText, ale wtedy trzeba dodać nowego wiersza siebie, f.ex .:

RichEditLog.SelText := 'Operation 1 OK'+sLineBreak; 

Tak czy inaczej, po nałożeniu na kodzie testowym wynik jest:

enter image description here

+0

Działa doskonale, dziękuję! :) – Aleph0

1

Czy spróbować gry z SelAttributes i SelText, SelStart, SelLenght?

Insert(0,'This is blue text.'); 
RichEdit1.SelStart := 0; 
RichEdit1.SelLenght := //end; 
RichEdit1.SelAttributes.Color := clBlue; 
+0

Próbowałem użyć 'SelAttributes', jak pokazano w moim pytaniu, ale działa tylko wtedy, gdy używam' Lines.Add', ale nie działa, jeśli używam 'Lines.Insert'. Kolor zmienia się raz i już nigdy się nie zmienia. – Aleph0

+0

Proponuję wstawić nie sformatowaną linię za pomocą 'Wstaw', a następnie używając 'SelStart',' SelLength' do zastosowania stylu do zaznaczonego tekstu. – cristallo

+0

Dziękuję, użyłem odpowiedzi Toma, ale wygląda to podobnie do twojej odpowiedzi. ;) – Aleph0