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 ?
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:
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;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With