freepascal - TRichMemo - LoadRichText 不起作用

标签 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;

谢谢。

最佳答案

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

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

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

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

关于freepascal - TRichMemo - LoadRichText 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18728842/

相关文章:

lazarus - 如何打开和关闭 TStringGrid 中的单元格颜色和文本

delphi - 模拟 PHP 函数 parse_url 的 Delphi/FreePascal 库或函数

raspberry-pi - Lazarus:安装 anchor 对接

macos - 是否可以在Mac上安装Pascal编译器而不安装XCODE?

ssh - 系统命令执行但立即后台

windows - 调试器错误 193 拉撒路

delphi - FPC指针操作到Delphi调整器

delphi - System.Math.MomentSkewKurtosis 中的 Moment 3 和 Moment 4 到底是什么

windows - 在Delphi中使其他应用程序窗口半透明

delphi - Indy10 自由帕斯卡