Delphi 7,TRichedit,被 RTF 编码困住

标签 delphi delphi-7

我就这个问题给你一个简短的想法。

  • 从数据库中检索 (id,name) 字段记录到列表框中。
  • 从列表中选择任何记录。
  • 将备注(Blob 类型)显示到选定 ID 的丰富编辑框中。
  • 除了两个记录都很好。
  • 这两条记录都有数千行记录到数据库中。
    备注:[
    它来自使用某些 rtf 格式代码从 word 或 Outlook 粘贴的注释。
    似乎导致“便笺”的那些是/f0protect (或非常相似的东西)在编码上的位置。
    所有引起问题的问题都在注释页面的某个地方。
    解决方法是打开基表记录,找到记录并显示备注字段。
    从基表记录中剪切/删除注释并将它们粘贴到 Word 或记事本中(取决于数量)。对 rtf 编码进行大量查找和替换。并将注释重新复制回基表记录中。
    ]
  • 将数据正确显示到富编辑中。
  • 之后,应用程序无法通过从列表框中选择另一条记录将另一条笔记加载到富编辑中。
  • 在内部发出错误声音。
  • 不会抛出任何错误或异常。

  • 对于这个问题,我想到了三件事。
    1. 问题可能出在 RTF 代码上。
    2.缓冲区或内存。
    3. TRichEdit 控件。

    我希望这个解释对我有所帮助。

    提前感谢您的帮助。

    最佳答案

    首先,我将重新表述您的问题,因为在它当前的化身(编号列表)中,它不容易回答。我考虑过实际编辑您的问题,但这可能太苛刻了。我这样做只是因为您是该网站的新手。如果您不是新手,我会简单地发表评论,询问“有什么问题?”

    这就是我认为问题应该是这样的:

    TRichEdit 对某些特定 RTF 的行为不端

    我正在根据数据库中的数据生成一些 RTF 并将其加载到 TRichEdit 控件中。大多数情况下它工作正常,但在某些情况下,生成的 RTF 会导致 TRichEdit 行为不端:它显示 RTF 很好,但是当移动到新记录时,TRichEdit 只是拒绝加载新文本!它不会抛出异常,但会从计算机中听到错误提示音。

    一些背景知识:在 TRichEdit 中加载的文本长达数千行,不是可以轻松附加到此消息的内容。此 RTF 由较小的 RTF 构建而成,从 Microsoft Outlook 或 Microsoft Word 复制粘贴。显然错误发生在 /f0protect (或与此非常相似的东西)可以在来自 Outlook 或 Word 的 RTF 位中找到。进入数据库并删除这些标记可以解决问题,但我需要一个更好的解决方案。

    我不确定问题可能是什么。我认为它是其中之一:

  • 问题可能出在 RTF 代码上。
  • 缓冲区或内存。
  • TRichEdit 控件。


  • 现在我的回答是:

    关于 RTF 格式的一些背景知识。首先,它是一种不断修订的 Microsoft 控制格式。您几乎可以将任何 Word 文档保存为 RTF 格式,然后在 Word 中重新加载它并让它看起来一样。这并不意味着您可以将任何 RTF 加载到 WordPad 中并让它看起来与 Word 中的完全一样!微软太聪明了,不会犯这样幼稚的错误。写字板只是 Microsoft Rich Text Controll(就像 TRichEdit)的包装。这意味着 TRichEdit 可以做的事情是有限制的。

    其次,RTF 格式不是上下文无关的:您不能指望简单地附加两个 RTF 和平并获得有效的 RTF! RTF 文档应该以标题开头,然后是文档区域。如果你附加两个 RTF 的和平,你会得到两个标题,我认为结果是未定义的。

    您可能是对的,问题是您提到的三个问题之一。令人高兴的是它很容易测试,抛出一个消除过程:
  • 缓冲区或内存:生成的 RTF 有多大?从代码创建一些等长(或更大)的 RTF,确保它只包含简单的 RTF。它行为不端吗?如果是这样,您遇到了某种内存限制,但我对此表示怀疑。尽管如此,它很容易测试!
  • 问题可能出在 RTF 代码上:很可能!你说如果你从数据库中删除那些有问题的标签,问题就会消失;在构建大 RTF 的过程中从代码中删除标签。如果您最终得到一长串需要删除的标签,也许您需要反过来做:列出您想要保留的代码并删除其他所有内容!
  • TRichEdit控件:据我所知没有第三方富文本编辑器,所以你不妨把问题(3)和问题(1)一样对待。除非您愿意使用 OLE 自动化在 Word 窗口中显示您的 RTF,否则说“此 RTF 是有效的,因为它在 Microsoft Word 2010 中运行良好”并没有任何帮助!

  • 其他建议:
  • 展示一些关于如何实际构建大型 RTF 的代码。
  • 如果您确实发现了错误的 rtf 标签并需要更多信息,请复制粘贴确切的代码:/f0protect不是有效的 rtf!
  • 关于Delphi 7,TRichedit,被 RTF 编码困住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4518008/

    相关文章:

    delphi - 如何从 Delphi 连接到 Sybase Sql Server?

    delphi - RttiType.TypeKind 和 RttiType.Name 之间有什么区别?

    windows - 如何使用 Windows API 将菜单背景渐变复制或复制到位图上?

    windows - 动态与静态 DLL 链接不同

    delphi - 如何使用 VCL 类的接口(interface) - 第 2 部分

    delphi - IIS 和 Delphi - 获取 ISAPI 中的应用程序文件夹

    delphi - 如何声明数组属性?

    windows - UDP丢包

    delphi - 将具有空字符的字符串保存到文件

    delphi - 让 Delphi 7 与源代码管理配合得很好?