2016-11-04 61 views
6

我使用TRichEdit为了显示在我的应用程序中完成的最后一个操作。我的TRichEdit的第一行应该是最后一个操作。如果操作失败,我想把这条线置于红色。在TRichEdit顶部插入彩色线条

我的问题是,我无法在我的TRichEdit顶部插入彩色线条。以下是我已经试过:

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

的问题是,我TRichEdit只适用于颜色的第一个变化,并保持它的所有线路。如果我使用Add()而不是Insert(),则颜色会发生变化,但该行会插入到我的TRichEdit的末尾。

我的问题是:有没有简单的方法来获得我要找的结果?

+0

零长度选择,指定选择属性,分配给SelText。 –

回答

5

你需要的,如果你想在一开始插入设置选择起点和长度,以0:

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

另一方面,不是RichEditLog.Lines.Insert()可以将文字分配到RichEdit.SelText,但你需要自己添加新的行字符,f.ex:

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

无论哪种方式,当应用到你的测试代码的结果是:

enter image description here

+0

完美地工作,谢谢! :) – Aleph0

1

您是否尝试过玩SelAttributesSelText,SelStart,SelLenght

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

我试着用我的问题中显示的SelAttributes,但它只有在使用'Lines.Add'时才起作用,但如果使用'Lines.Insert'则不起作用。颜色改变一次,之后再也不会改变。 – Aleph0

+0

我建议你使用'Insert'插入未格式化的行,然后使用'SelStart','SelLength'将样式应用到选定的文本 – cristallo

+0

谢谢,我使用了Tom的答案,但它看起来与你的答案类似。 ;) – Aleph0