我正在尝试将 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;
谢谢。
最佳答案
好的,我找到了问题的解决方案。
首先,我创建了一个简单的测试项目,LoadRichText
和 SaveRichText
工作了,这意味着问题出在我的代码中的某个地方......
我的流是在单独单元的类中声明的。在另一种表单中,我有丰富的备忘录控件,当表单关闭时,数据将保存到流中,我知道这部分有效,因为我可以将其保存到文件并在外部查看。
问题是当我创建包含丰富备忘录的表单时,我从 FormCreate
事件调用 LoadRichText
。因此,我将其移至 FormActivate
中,现在它可以正常工作了。
关于freepascal - TRichMemo - LoadRichText 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18728842/