操作多行edit(如memo,richedit)的lines,由于memo和richedit没有锁定(例如beginupdate)的功能,所有操作都会在界面反映,导致速度较慢,可以将lines.text赋给一个stringlist然后操作stringlist,最后将text赋值回去,举一个去除空行的例子:
var
sl:TStrings;
i,j,k:Integer;
S:string;
begin
sl:=TStringList.Create;
//sl:=ed1.Lines;//千万不可这样赋值,这样是将ed1.Lines的指针(是不是?)赋给了sl,操作sl等同操作lines不但没有达到我们的目的还会在后面导致av错误
sl.Text:=ed1.Lines.Text;
with sl do
begin
i:=0;
while i < Count do
begin
s:=sl[i];
j := Length(S);
k:=j;
while (J > 0) and (S[J] <= ' ') do Dec(J);
if j=0 then
Delete(i)
else
begin
if j<k then sl[i]:= Copy(S, 1, J);
inc(i);
end;
end;
end;
ed1.Lines:=sl;
sl.Free;
end;
后记:
惭愧惭愧,看到我的博客居然还有几个朋友关注和订阅,觉得不发点什么实在对不起他们,赶快从自己的代码里面找了一段。
再惭愧,memo等的lines有beginupdate。呵呵这段时间看KOL看多了,思考都扁平化了