TRichMemo - LoadRichText无法正常工作

时间:2013-09-10 21:12:52

标签: freepascal lazarus

我正在尝试将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;

感谢。

1 个答案:

答案 0 :(得分:2)

好的,我找到了解决问题的方法。

首先我创建了一个简单的测试项目,LoadRichTextSaveRichText工作,这意味着问题出现在我的代码中......

我的流在一个单独的单元中的类中声明。在另一种形式中,我有丰富的备忘录控件,当表单关闭时,数据被保存到流中,我知道该部分有效,因为我可以将其保存到文件并在外部查看。

问题是当我创建包含我的丰富备忘录的表单时,我正在从LoadRichText事件中调用FormCreate。所以我把它移到FormActivate,现在它可以正常工作。