Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Insert colored line at the top of TRichEdit

I'm using a TRichEdit in order to show the last operations that have been done in my application. The first line of my TRichEdit should be the last operation. If the operation failed, I would like to put this line in red.

My problem is that I am not able to insert a colored line at the top of my TRichEdit. Here is what I've tried:

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');

The problem is that my TRichEdit only apply the first change of color and keep it for all the lines. If I use Add() instead of Insert(), the colors are changing but the line are inserted at the end of my TRichEdit.

My question is : Is there an easy way to get the results I'm looking for ?

like image 279
Aleph0 Avatar asked Nov 04 '16 12:11

Aleph0


2 Answers

You need to set the selected start and length to 0 if you want to insert at the beginning:

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

Alternatively, instead of RichEditLog.Lines.Insert() you can assign the text to RichEdit.SelText, but then you need to add the new line characters yourself, f.ex.:

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

Either way, when applied to your test code the result is:

enter image description here

like image 168
Tom Brunberg Avatar answered Oct 20 '22 05:10

Tom Brunberg


Did you try playing with SelAttributes and SelText, SelStart, SelLenght ?

Insert(0,'This is blue text.');
RichEdit1.SelStart := 0; 
RichEdit1.SelLenght := //end;
RichEdit1.SelAttributes.Color := clBlue;
like image 28
cristallo Avatar answered Oct 20 '22 04:10

cristallo