【问题标题】:Insert colored line at the top of TRichEdit在 TRichEdit 顶部插入彩色线条
【发布时间】:2016-11-04 12:33:11
【问题描述】:

我使用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。

标签: delphi delphi-xe7


【解决方案1】:

如果要在开头插入,则需要将选定的开始和长度设置为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;

无论哪种方式,当应用于您的测试代码时,结果是:

【讨论】:

    【解决方案2】:

    您尝试过使用SelAttributesSelTextSelStartSelLenght 吗?

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

    【讨论】:

    • 我尝试使用SelAttributes,如我的问题所示,但它仅在我使用Lines.Add 时有效,但在我使用Lines.Insert 时无效。颜色改变一次,之后就不再改变。
    • 我建议您使用Insert 插入未格式化的行,然后使用SelStartSelLength 将样式应用于所选文本
    • 谢谢,我使用了汤姆的答案,但看起来与您的答案相似。 ;)
    • 是的......他的代码更正确,我没有使用真正的Delphi编译器......但只有我的头脑和记忆:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    相关资源
    最近更新 更多