我的程序如下:
RichEdit1.Clear;
RichEdit1.PlainText:=False;
RichEdit1.Lines.LoadFromFile('D:\abc.txt');
for i:=0 to RichEdit1.Lines.Count-1 do
  begin
    Str:=RichEdit1.Lines[i];
    Str:=StringReplace(Str,'WindowsXP','Windows98',这还一个参数);
    RichEdit1.Lines.Delete(i);
    RichEdit1.Lines.Insert(Str,i)
  end;
RichEdit1.PlainText:=True;
RichEdit1.Lines.SaveToFile('D:\abc.txt')
我的程序很简单,就是要修改一下某个文本文件中的一些内容。
但是如果这个文件中有一段很长的字符,以回车为结束,记事本的一行显示不完,要换到下一行才能显示完(不是那种自动换行)。遇到这样的Line的时候,程序就会在RichEdit1.Lines.Delete(i); RichEdit1.Lines.Insert(Str,i)出错:RichEdit Line Insertion error。
于是我把程序改成了这样:
RichEdit1.Clear;
RichEdit1.PlainText:=False;
RichEdit1.Lines.LoadFromFile('D:\abc.txt');
RichEdit1.Lines.Text:=StringReplace(RichEdit1.Lines.Text,'WindowsXP','Windows98',这还一个参数);
RichEdit1.PlainText:=True;
RichEdit1.Lines.SaveToFile('D:\abc.txt')
结果在执行RichEdit1.Lines.Text:=StringReplace(RichEdit1.Lines.Text,'WindowsXP','Windows98',这还一个参数);还是出现了同样的错误。
这是为什么?应该如何解决呢?

解决方案 »

  1.   

    建议先在TStrings理完成所有的操作在给RichEdit加载Lines属性:var ss: TStrings; 
    begin
      ss:=TStringList.Create;
      ss.LoadFromFile(...);
      ...完成你的字符操作
      ss.SaveToFile(...);
      RichEdit1.Lines:=ss;//如果没有必要显示文件,这句可以省去
      ss.free;
    end;其实这样的代码给搂住写的没有什么区别,不过我的意见如果不需要用户界面就尽量少用控件,如TBitmap可以完成的事情就不要用TImage,TStrings可以完成的事情就少用TListBox,这样可以提高运行的速度和减少出错的机会。