首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TRichMemo - LoadRichText不工作

TRichMemo - LoadRichText不工作
EN

Stack Overflow用户
提问于 2013-09-10 21:12:51
回答 1查看 644关注 0票数 2

我正在尝试将TRichMemo的内容保存到TMemoryStream,然后能够将格式化的数据从流加载回富备忘录。

问题是LoadRichText由于某种原因而失败了。我知道数据被保存到我的流中,因为我实际上可以将它保存为rtf文件并在外部查看它。

这基本上就是我所拥有的:

代码语言:javascript
复制
var
  FMyStream: TMemoryStream;

拯救:

代码语言:javascript
复制
RichMemo1.SaveRichText(FMyStream);

装载:

代码语言:javascript
复制
FMyStream.Seek(0, soBeginning);
if not RichMemo1.LoadRichText(FMyStream) then
  raise Exception.Create('Failed to load data from stream.');

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

有什么问题吗?

LoadRichText函数的代码是:

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
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;

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-11 12:31:34

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

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

我的流是在一个单独单元的类中声明的。在另一个表单中,我有我的富备注控件,当表单关闭时,数据被保存到流中,我知道的部分起作用了,因为我可以将它保存到文件中并在外部查看它。

问题是,当我创建包含富备忘录的表单时,我从FormCreate事件调用了FormCreate。所以我把它移到FormActivate中,现在它没有出错。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18728842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档