代码之家  ›  专栏  ›  技术社区  ›  user1175743

TRichMemo-LoadRichText不工作

  •  2
  • user1175743  · 技术社区  · 12 年前

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

    正如我所说,数据被保存为正确的流,但每次试图加载到富备忘录中都会遇到异常。

    可能是什么问题?

    的代码 加载RichText 功能是:

    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 回复  |  直到 12 年前
        1
  •  2
  •   user1175743 user1175743    12 年前

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

    起初,我创建了一个简单的测试项目 LoadRichText SaveRichText 有效,这意味着问题在我的代码中的某个地方。。。

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

    问题是,当我创建包含丰富备忘录的表单时,我打电话给 加载RichText 来自 FormCreate 事件所以我把它搬到了 FormActivate 现在它可以正常工作了。