在TRichEdit顶部插入彩色线条

6

我正在使用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的末尾。
我的问题是:有没有一种简单的方法可以得到我想要的结果?

零长度选择,指定选择属性,分配给SelText。 - David Heffernan
2个回答

5

如果您想在开头插入内容,则需要将所选的起始位置和长度设置为0:

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

或者,你可以使用RichEdit.SelText来替代RichEditLog.Lines.Insert()来赋值文本,但是你需要自己添加新的换行符,例如:

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

无论如何,当应用于您的测试代码时,结果为:

enter image description here


1

你尝试过使用 SelAttributesSelTextSelStartSelLenght 进行编程吗?

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

我尝试使用我问题中展示的SelAttributes,但只有在使用Lines.Add时才有效,而在使用Lines.Insert时无效。颜色只改变了一次,之后就再也不改变了。 - Aleph0
我建议您使用“插入”来插入未格式化的行,然后使用“SelStart”和“SelLength”为所选文本应用样式。 - cristallo
谢谢,我使用了Tom的答案,但它看起来与你的答案类似。 ;) - Aleph0
2
是的...他的代码更正确,我没有使用真正的Delphi编译器...只是依靠我的头脑和记忆 :-) - cristallo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接