我有一个TRichMemo
对象,我在运行时创建并填充文本。
我有一个定时器,每10秒触发一次功能。该函数看起来像这样:
procedure TServerSideForm.NewLineTimerTimer(Sender: TObject);
var
timeForward: TDateTime;
timerText: wideString;
startRange, endRange: longInt;
begin
timeForward := Time;
timeForward := IncSecond(timeForward, ServerSideForm.NewLineTimer.Interval div 1000);
//...
timerText := TimeToStr(Time) + ' - ' + TimeToStr(timeForward);
startRange := Length(WindowMemo.Text);
WindowMemo.Text := WindowMemo.Text + sLineBreak + sLineBreak + timerText + sLineBreak + sLineBreak;
endRange := Length(WindowMemo.Text) - 1;
WindowMemo.SetRangeColor(startRange, endRange, clGreen);
//...
end;
一切正常,所需范围内的文字变为绿色。
但是只要我向TRichMemo
添加一些新文字,所有内容都会重置为黑色文字。
为什么会这样?有没有办法防止这种重置发生?
P.S当我使用SetRangeParams
函数时会发生同样的情况。
答案 0 :(得分:2)
使用Append
方法而不是访问type String
值Text
,因为它只保留文字而不是格式。
更改
WindowMemo.Text := WindowMemo.Text + sLineBreak + sLineBreak + timerText + sLineBreak + sLineBreak;
与
WindowMemo.Append(sLineBreak + sLineBreak + timerText + sLineBreak + sLineBreak);
方法2
如果您决定添加带换行符的文字,可以用
替换上述行uses RichMemoUtils;
...
InsertColorStyledText(WindowMemo,timerText,Random($FFFFFF),[],Length(WindowMemo.Text) -1);