将 RTF 文本从数据库加载到 TRichEdit

2023-11-27

我目前正在将我们的软件解决方案从 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 有关;)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 RTF 文本从数据库加载到 TRichEdit 的相关文章

随机推荐

  • 如何在javascript中解析具有两位小数的浮点数?

    我有以下代码 我希望如果price result 等于一个整数 比如说10 那么我想添加两位小数 所以 10 就是 10 点 或者如果它等于 10 6 则为 10 60 不知道该怎么做 price result parseFloat tes
  • python - 计算每个数字出现的次数

    我有一长串用逗号分隔的数字 我可以搜索并统计大多数数字 或更准确地说 2 位数字 出现的次数 如果我有一个像这样的数字序列 1 2 3 4 5 1 6 7 1 8 9 10 11 12 1 1 2我想数一下这个数字有多少次1看来我真的应该得
  • 使用 python 和 selenium 连接到 phantomJs webdriver 时遇到问题

    我正在尝试在使用 selenium 和 phantomjs webdriver 的 Linux 服务器上运行 python 脚本 但是 我不断收到以下错误消息 selenium common exceptions WebDriverExce
  • SwiperJS 样式不适用于 NextJS

    我已经安装了SwiperJS进入我的NextJS项目 我完全遵循了 Swiper 教程文档 但是当我尝试对类进行样式设计时出现问题 swiper swiper slide 样式不响应我的自定义样式 就我而言 我的滑块是一个组件 并且有一个名
  • 增加 iOS 5.x 中 UITextView 中表情符号字符的字体大小

    如果我有 UITextView 并将字体大小设置为 32 当我运行应用程序 在模拟器和设备上 时 我会看到一个大光标 并且我键入的文本就像我想象的那样出现 但如果我切换表情符号键盘 它们会显示很小 就像字体大小从未增加一样 我知道这些表情符
  • 从 Visual Studio 2015 构建时自动发布 Web 应用程序

    有没有什么方法可以在成功构建时使用预先创建的发布配置文件自动发布 Web 应用程序 我不想必须单击发布图标 需要在 Visual Studio 2015 上成功构建 Web 项目时发生这种情况 不使用宏 任何样品将不胜感激 拉米的解决方案有
  • 检查空手道的 2 个不同状态

    我有一个关于空手道框架的问题 我想知道我们是否可以检查空手道的 2 状态 例如 给定 url myUrl 当方法得到 然后状态 200 或 204 感谢您的帮助 Yes Then assert responseStatus 200 resp
  • C++:除了虚函数之外,还有哪些原因导致“未定义引用‘typeinfo for [class name]’”

    其中一些错误可以通过修改来解决 virtual void draw to virtual void draw 但是 除了虚拟函数之外 这些错误的其他原因可能是什么 出现以下错误可能是什么原因 tmp cciGEgp5 o rodata ZT
  • 标签、复选框和单选按钮

    我的网络应用程序使用如下例所示的表单 First Name Last Name Gender Male Female 我使用的标记类似于
  • 隐藏 Android 键盘按键预览

    我想要做的是仅隐藏显示您在使用软键盘时当前按下的键的弹出窗口 这可能吗 我正在创建自己的新键盘 不需要它们 据我所知 下图是实际的弹出键盘 您可以选择使用它来显示android popupKeyboard and android popup
  • 在javascript中获取DIV的宽度和高度

    我试图在用户更改时获取 div 宽度和高度 并将该数字提交到另一个页面 我似乎不知道如何获得宽度和高度
  • 如何在 Scala 中对可变长度的重复序列进行分组

    我有一个以某种模式重复的整数集合 val repeatingSequence List 1 2 3 1 2 3 4 1 2 1 2 3 4 5 当模式重复时 我想将该列表分段 在这种情况下 当序列返回到 1 时 val groupedByS
  • 使用 Kubernetes kubeadm 和 minikube 在虚拟机中创建节点

    我正在尝试使用同一台机器创建具有不同数量节点的 Kubernetes 集群 在这里 我想创建单独的虚拟机 并需要在这些虚拟机中创建节点 我目前正在探索 kubeadm 和 minikube 来完成这些任务 在探索的过程中 我有以下困惑 我需
  • 如何将一个元素移动到另一个元素中

    我想将一个 DIV 元素移动到另一个 DIV 元素中 例如 我想移动这个 包括所有孩子 div div 进入这个 div div 这样我就有了这个 div div div div 您可能想使用appendTo函数 添加到元素的末尾 sour
  • Express Node.js 不起作用

    我在 ubuntu 12 04 上安装了express 4以及node js npm和express generator 并使用以下命令创建了一个应用程序 express test hogan c less cd test npm inst
  • SearchBuf soWholeWord 意外输出

    测试时StrUtils SearchBuf with soWholeWord soDown 选项 出现了一些意想不到的结果 program Project1 Uses SysUtils StrUtils function WordFound
  • Azure Functions:绑定到 DocumentClient 与静态实例 - 推荐什么?

    我知道如何将查询直接绑定到 Azure 函数并在函数中使用 Cosmos DB 触发器 但是 我正在寻找使用方向DocumentClient 努吉特包Microsoft Azure Cosmos 直接地 There s 文档这解释了如何在执
  • 实现“show”函数

    我想实施show 二元 函数的方法并使其能够区分内函子 a gt a 类似于伪 Haskell 代码 instance Show a gt b where show fun lt
  • jquery:如何更新可拖动克隆ID?

    我想将可拖动项目添加到可排序列表中 这在我的示例中运行良好http jsbin com ipese5 35 问题是我想在拖动到可排序列表时更新克隆项目的 id 奇怪的是 下面的代码将 de ui 对象中的 id 更新为 new id 正如我
  • 将 RTF 文本从数据库加载到 TRichEdit

    我目前正在将我们的软件解决方案从 Delphi 7 迁移到 2010 大部分更改都很简单 只剩下少量障碍 在表单上 我们使用 TRichEdit 它显示从 MSSQL 数据库中的 blob 字段抓取的 rtf 文本 Delphi 7 中是这