加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 将数据库中的RTF文本加载到TRichEdit中

发布时间:2020-12-15 04:09:39 所属栏目:大数据 来源:网络整理
导读:我目前正在将我们的软件解决方案从Delphi 7迁移到2010年.大多数情况下,这些变化很简单,只剩下少量的障碍. 在表单上我们使用TRichEdit,它显示从MSSQL数据库中的blob字段中获取的rtf文本.这是它在Delphi 7中的工作方式: //Get RTF text from Blob field using
我目前正在将我们的软件解决方案从Delphi 7迁移到2010年.大多数情况下,这些变化很简单,只剩下少量的障碍.

在表单上我们使用TRichEdit,它显示从MSSQL数据库中的blob字段中获取的rtf文本.这是它在Delphi 7中的工作方式:

//Get RTF text from Blob field using TADOQuery
rtfStream := sql.CreateBlobStream(sql.FieldByName('rtftext'),BmRead) as TMemoryStream;

//Load into TRichEdit
RichEdit.PlainText := False;
RichEdit.Lines.LoadFromStream(rtfStream);

这将在TRichEdit组件中按预期显示RTF,但Delphi 2010中的相同代码将RTF显示为纯文本,每个字符之间带有选项卡.我认为这与从Ansi到Unicode的变化有很大关系,但我没有任何运气来纠正这个问题.

任何有助于此工作的帮助将非常感激.谢谢

解决方法

好吧我明白了.

用于加载rtf文本:

//Get the data from the database as AnsiString
rtfString := sql.FieldByName('rtftext').AsAnsiString;

//Write the string into a stream
stream := TMemoryStream.Create;
stream.Clear;
stream.Write(PAnsiChar(rtfString)^,Length(rtfString));
stream.Position := 0;

//Load the stream into the RichEdit
RichEdit.PlainText := False;
RichEdit.Lines.LoadFromStream(stream);

stream.Free;

要保存rtf文本:

//Save to stream
stream := TMemoryStream.Create;
stream.Clear;

RichEdit.Lines.SaveToStream(stream);
stream.Position := 0;

//Read from the stream into an AnsiString (rtfString)
if (stream.Size > 0) then begin
    SetLength(rtfString,stream.Size);
    if (stream.Read(rtfString[1],stream.Size) <= 0) then
        raise EStreamError.CreateFmt('End of stream reached with %d bytes left to read.',[stream.Size]);
end;

stream.Free;

//Save to database
sql.FieldByName('rtftext').AsAnsiString := rtfString;

这花了我太长时间才弄明白:)我想我已经学到了一件事……如果在Delphi 2010中出现问题,它通常与unicode有关;)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读