问题描述如下:
现有长串,如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;

解决方案 »

  1.   

    我统计一下时间,费时的操作为向richedit加入字符串的操作过程
    如果将加入字符串(richedit.lines.assign(lines))与设置颜色分开的话,两个步骤费时差不多相同4000左右(gettickcount)
    如果将两个过程和在一起,即边加入值,边设置颜色,时间为6200左右,
    那么如何能够减少赋值的时间?
      

  2.   

    edt.selstart:=length(edt.text);
          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]);
    看是不是快些,注意一点加入时候前一句一定设置颜色,否则将采用上次设置的颜色。
      

  3.   

    在后面追加时,可以不设置selLength和selStart,这样确实节省了一部分时间,但不是很大,
     djmdjmdjm:加入之前设置颜色,随的加入的将为设置的颜色,但只能影响一行内容,重新加入行时,将自动改为默认颜色
      

  4.   

    那么如何设置SelAttributes的默认颜色,即一次设置后,新加入的行即以设置后颜色显示,
    如richedit1.font.color:=clred,则所有字体颜色都为红色了,这不是要求的效果