我正在尝试将TRichMemo的内容保存到TMemoryStream,然后能够将格式化的数据从流中加载回富文件夹。
问题是LoadRichText
由于某种原因失败了。我知道数据已保存到我的流中,因为我实际上可以将文件保存为rtf并在外部查看。
这基本上就是我所拥有的:
var
FMyStream: TMemoryStream;
保存:
RichMemo1.SaveRichText(FMyStream);
加载:
FMyStream.Seek(0, soBeginning);
if not RichMemo1.LoadRichText(FMyStream) then
raise Exception.Create('Failed to load data from stream.');
正如我所说的那样,数据被保存为正确流式传输,但是尝试加载到丰富的备忘录中每次都会遇到我的异常。
可能是什么问题?
LoadRichText
功能的代码是:
function TCustomRichMemo.LoadRichText(Source: TStream): Boolean;
begin
if Assigned(Source) and HandleAllocated then begin
Result := TWSCustomRichMemoClass(WidgetSetClass).LoadRichText(Self, Source);
if not Result and Assigned(RTFLoadStream) then begin
Self.Lines.BeginUpdate;
Self.Lines.Clear;
Result:=RTFLoadStream(Self, Source);
Self.Lines.EndUpdate;
end;
end else
Result := false;
end;
和SaveRichText
代码:
function TCustomRichMemo.SaveRichText(Dest: TStream): Boolean;
begin
if Assigned(Dest) and HandleAllocated then begin
Result := TWSCustomRichMemoClass(WidgetSetClass).SaveRichText(Self, Dest);
if not Result and Assigned(RTFSaveStream) then
Result:=RTFSaveStream(Self, Dest);
end else
Result := false;
end;
感谢。
答案 0 :(得分:2)
好的,我找到了解决问题的方法。
首先我创建了一个简单的测试项目,LoadRichText
和SaveRichText
工作,这意味着问题出现在我的代码中......
我的流在一个单独的单元中的类中声明。在另一种形式中,我有丰富的备忘录控件,当表单关闭时,数据被保存到流中,我知道该部分有效,因为我可以将其保存到文件并在外部查看。
问题是当我创建包含我的丰富备忘录的表单时,我正在从LoadRichText
事件中调用FormCreate
。所以我把它移到FormActivate
,现在它可以正常工作。