问题描述如下:
现有长串,如sl:sringlist;sl包含有约5000行数据,将sl中的数据在richedit(edt)中显示出来,显示时每行可能有不同的颜色,(可能为每行数据的前两个长度为数字,代表本行颜色的标识)
问题如下:
实现时,我使用下以下的方法
for i:=0 to sl.count-1
begin
case strtointdef(copy(sl.strings[i],1,2),-1) of
1://假定有1,为红色
begin
edt.selstart:=length(edt.text);
edt.lines.add(sl.strings[i]);
edt.sellength:=length(sl.strings[i]);
edt.SelAttributes.Color:=clRed;
end;
......
-1:
;
end;
end;
可以实现不同的行不同颜色的效果,但是因为不停地重画richedit,故速度出奇地慢,请各位给出更好的办法,end;
现有长串,如sl:sringlist;sl包含有约5000行数据,将sl中的数据在richedit(edt)中显示出来,显示时每行可能有不同的颜色,(可能为每行数据的前两个长度为数字,代表本行颜色的标识)
问题如下:
实现时,我使用下以下的方法
for i:=0 to sl.count-1
begin
case strtointdef(copy(sl.strings[i],1,2),-1) of
1://假定有1,为红色
begin
edt.selstart:=length(edt.text);
edt.lines.add(sl.strings[i]);
edt.sellength:=length(sl.strings[i]);
edt.SelAttributes.Color:=clRed;
end;
......
-1:
;
end;
end;
可以实现不同的行不同颜色的效果,但是因为不停地重画richedit,故速度出奇地慢,请各位给出更好的办法,end;
如果将加入字符串(richedit.lines.assign(lines))与设置颜色分开的话,两个步骤费时差不多相同4000左右(gettickcount)
如果将两个过程和在一起,即边加入值,边设置颜色,时间为6200左右,
那么如何能够减少赋值的时间?
edt.lines.add(sl.strings[i]);
edt.sellength:=length(sl.strings[i]);
edt.SelAttributes.Color:=clRed;
改成
edt.SelAttributes.Color:=clRed;
edt.lines.add(sl.strings[i]);
看是不是快些,注意一点加入时候前一句一定设置颜色,否则将采用上次设置的颜色。
djmdjmdjm:加入之前设置颜色,随的加入的将为设置的颜色,但只能影响一行内容,重新加入行时,将自动改为默认颜色
如richedit1.font.color:=clred,则所有字体颜色都为红色了,这不是要求的效果