【问题标题】:Delphi 7, TRichedit, Stuck by RTF CodingDelphi 7,TRichedit,被 RTF 编码困住了
【发布时间】:2010-12-24 19:32:06
【问题描述】:

我正在向您简要介绍这个问题。

  1. 从数据库中检索(id、name)字段记录到列表框中。
  2. 从列表中选择任何记录。
  3. 将备注(Blob 类型)显示到选定 ID 的丰富编辑框中。
  4. 除了两条记录都很好。
  5. 这两条记录都有数千行记录到数据库中。 注意事项:[ 它来自使用某些 rtf 格式代码从 word 或 Outlook 粘贴的注释。 似乎导致“便笺”的那些是 /f0protect (或与此非常相似的东西)在编码上的位置。 所有引起问题的问题都在注释页面的某个地方。 解决方法是打开基表记录,找到记录并显示备注字段。 从基表记录中剪切/删除注释并将它们粘贴到 Word 或记事本中(取决于数量)。对 rtf 编码进行大量查找和替换。并将注释重新复制回基表记录中。 ]

  6. 在 Rich Edit 中正确显示数据。

  7. 在该记录之后,应用程序无法通过从列表框中选择另一条记录将另一条笔记加载到 Rich Edit 中。
  8. 在内部发出错误声音。
  9. 不抛出任何错误或异常。

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

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

提前感谢您的帮助。

【问题讨论】:

    标签: delphi delphi-7


    【解决方案1】:

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

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


    TRichEdit 在某些特定的 RTF 中表现不佳

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

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

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

    1. 问题可能出在 RTF 代码上。
    2. 缓冲区或内存。
    3. TrichEdit 控件。

    现在我的答案是:

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

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

    您可能是对的,问题是您提到的 3 个问题之一。幸好容易测试,抛出一个排除过程:

    1. 缓冲区或内存:生成的 RTF 有多大?从代码创建一些等长(或更大)的 RTF,确保它只包含简单的 RTF。它行为不端吗?如果是这样,您遇到了某种内存限制,但我对此表示怀疑。尽管如此,它还是很容易测试!

    2. 问题可能出在 RTF 代码上:很可能!你说如果你从数据库中删除那些有问题的标签,问题就会消失;在构建大 RTF 的过程中从代码中删除标签。如果你最终得到一长串需要删除的标签,也许你需要反过来做:列出你想要保留的代码并删除其他所有内容!

    3. TRichEdit 控件:据我所知没有第三方富文本编辑器,所以你不妨把问题(3)和问题(1)一样对待。除非您愿意使用 OLE 自动化在 Word 窗口中显示您的 RTF!

    其他建议:

    • 显示一些有关如何实际构建大型 RTF 的代码。
    • 如果您确实发现了错误的 rtf 标签并需要更多信息,请复制粘贴确切代码:/f0protect is not valid rtf!

    【讨论】:

    • 该站点是一个 wiki。编辑问题并不太苛刻。这将使所有可能有类似问题的未来访问者更容易快速确定他们的问题是否与这个问题相符。
    猜你喜欢
    • 2012-05-18
    • 2019-04-30
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 2019-05-19
    相关资源
    最近更新 更多