我现在用的RICHEDIT来实现用户对字体和颜色的设置,然后把RICHEDIT中的格式化字符信息保存成TSTRINGSTREAM。最后在把这个STRINGSTREAM中的字符流保存在一个TLABEL的Caption中。在下次加载的时候再把这个LABEL的字符串信息恢复到流中然后加载到RICHEDIT中,可发现好像这样做有时候会导致C盘临时目录中生成了很多临时文件而且非常的大。总共有4G多。我想问问我这样做对不对?有什么其他好的方式来保存RTF格式文本呢?
  另外我保存这些RTF文本是为了在QUICKREPORT中打印预览使用。用QRRICHTEXT来加载流信息实现RTF文本的显示。可有时候出现CPU百分之百占用率的问题。不知道这是为什么。
   
  请ZSWANG给看看,并能够给出一个好的解决方案。谢谢了!

解决方案 »

  1.   

    procedure SetRTFText(RichEdit: TRichEdit; RichText: string);
    var
      FStream: TMemoryStream;
    begin
      FStream := TMemoryStream.Create;
      FStream.Clear;
      FStream.WriteBuffer(RichText[1], Length(RichText));
      FStream.Position := 0;
      RichEdit.Lines.LoadFromStream(FStream);
      FStream.Free;
    end;function GetRTFText(RichEdit: TRichEdit): string; overload;
    var
      FStream: TMemoryStream;
    begin
      FStream := TMemoryStream.Create;
      FStream.Clear;
      try
        RichEdit.Lines.SaveToStream(FStream);
        Result := PChar(FStream.Memory);
      finally
        FStream.Free;
      end;
    end;function GetRTFText(RichEdit: TRxRichEdit): string; overload;
    var
      FStream: TMemoryStream;
    begin
      FStream := TMemoryStream.Create;
      FStream.Clear;
      try
        RichEdit.Lines.SaveToStream(FStream);
        Result := PChar(FStream.Memory);
      finally
        FStream.Free;
      end;
    end;
      

  2.   

    我想问问,保存RTF格式的文本信息除了用流来存储再没有别的方法了吗?
    我现在要把QUICKREPORT窗体保存成RES文件,然后复原。为了保存RTF文本,我创建了一个Label来存储RTF的流信息,我总觉得这样不太保险,因为即使是很短的文本也能产生很长的流信息,是不是因为这个导致临时文件太大?
    另外这些临时文件都是QR开头的,好像是QuickReport在打印或者预览时产生的临时文件。跟踪也不太好确定是哪产生产生的
      

  3.   

    将rtf保存为文件temp.rtf,制作资源文件
    temp.rc
    [code=BatchFile]RTF_Temp RTF "temp.rtf"[/code]temp.bat
    [code=BatchFile]brcc32 temp.rc[/code]执行temp.bat则编译成temp.res
    单元中{$R temp.res}
    当然不编译直接在工程中也可以添加temp.rc文件也可以这样就可以用资源流访问
    TResourceStream.Create(HInstance, 'RTF_Temp', 'RTF');
      

  4.   

    呵呵,不好意思,我不太明白。
    我要保存的RTF信息是根据报告的内容动态生成的。每份报告都要有它对应的RTF信息,不是固定的。用资源文件的话好像不行吧。