添加新文本时如何防止 TRichMemo 重置文本属性
How to prevent TRichMemo from resetting text attributes when you add new text
我有一个 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
函数时,同样的情况发生了。
使用 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);
我有一个 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
函数时,同样的情况发生了。
使用 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);