我现在用的RICHEDIT来实现用户对字体和颜色的设置,然后把RICHEDIT中的格式化字符信息保存成TSTRINGSTREAM。最后在把这个STRINGSTREAM中的字符流保存在一个TLABEL的Caption中。在下次加载的时候再把这个LABEL的字符串信息恢复到流中然后加载到RICHEDIT中,可发现好像这样做有时候会导致C盘临时目录中生成了很多临时文件而且非常的大。总共有4G多。我想问问我这样做对不对?有什么其他好的方式来保存RTF格式文本呢?
另外我保存这些RTF文本是为了在QUICKREPORT中打印预览使用。用QRRICHTEXT来加载流信息实现RTF文本的显示。可有时候出现CPU百分之百占用率的问题。不知道这是为什么。
请ZSWANG给看看,并能够给出一个好的解决方案。谢谢了!
另外我保存这些RTF文本是为了在QUICKREPORT中打印预览使用。用QRRICHTEXT来加载流信息实现RTF文本的显示。可有时候出现CPU百分之百占用率的问题。不知道这是为什么。
请ZSWANG给看看,并能够给出一个好的解决方案。谢谢了!
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;
我现在要把QUICKREPORT窗体保存成RES文件,然后复原。为了保存RTF文本,我创建了一个Label来存储RTF的流信息,我总觉得这样不太保险,因为即使是很短的文本也能产生很长的流信息,是不是因为这个导致临时文件太大?
另外这些临时文件都是QR开头的,好像是QuickReport在打印或者预览时产生的临时文件。跟踪也不太好确定是哪产生产生的
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');
我要保存的RTF信息是根据报告的内容动态生成的。每份报告都要有它对应的RTF信息,不是固定的。用资源文件的话好像不行吧。