简体   繁体   中英

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 ?

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;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM