2016-11-04 91 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