【问题标题】:Migrating Delphi DFM's with special characters to D2009将带有特殊字符的 Delphi DFM 迁移到 D2009
【发布时间】:2010-10-24 18:08:15
【问题描述】:

我有许多 Delphi 表格,其中我们使用了几个特殊字符 - “度”符号和“欧姆”符号。这些字符用于保存在 DFM 文件中的标签标题中,不会在运行时生成或修改。回到我们第一次设计这些形式时,度数符号很简单,因为它在 Ansi 字符集(代码 176)中,但欧姆符号需要希腊字符集才能与代码 217 一起使用。幸运的是(我们发现)我们发现的所有其他字符需要(字母和数字)与希腊字符集配合得很好。

现在我们希望这些表单在 D2009 中看起来相同。度数符号看起来不错,但欧姆符号显示“Ù”,因为 dfm 文本是“Caption = 'Typed in Ohms - 1234 '#217”。我发现我可以编辑表格以输入正确的 unicode ohms 符号(8486),但当然这会丢失为“?”回到 D7 时。理想情况下,我想告诉 D2009 继续使用带有表格的希腊字符集,以便 dfm 中的 #217 映射到欧姆符号。这可能吗?它似乎忽略了“GREEK_CHARSET”的 Font.Charset 设置。我发现了一种解决此问题的肮脏方法,即遍历所有组件并执行“S​​tringReplace(S,'Ù',OhmsChar,[rfReplaceAll])”,但这太可怕了,肯定有更好的方法吗?

谢谢, 布赖恩

【问题讨论】:

    标签: delphi unicode delphi-2009 dfm ohm


    【解决方案1】:

    使用dxgettext 解决了我遇到的类似问题。我没有使用有问题的字幕,而是使用了干净的 ascii(例如,“Typed in Ohms”),然后将它们翻译成 po 文件,作为资源嵌入到 exe 中。

    顺便说一句,dxgettext 是一种向应用程序添加翻译的好方法,只需很少的开销和标准格式 (po/mo) 以及良好的 3p 编辑器 (poEdit)。适用于 D7 和 D2009。

    【讨论】:

      【解决方案2】:

      正如 Bruce 已经提到的,您可以使用代码来提供这些值。我只是举一个例子和一些额外的信息。

      resourcestring
      {$IFDEF UNICODE}
        cOhm = unicodeohm;        // replace with correct values.
        cDegree = unicodedegree;
      {$ELSE}
        cOhm = ansiohm;
        cDegree = ansidegree;
      

      我建议对可翻译文本使用资源字符串而不是 const,因为大多数翻译工具都使用资源。

      【讨论】:

      • +1 用于资源字符串。它们是处理这个问题的最简洁的方法,并且使用现有工具使以后的翻译变得轻而易举。
      • 这是一个很好的代码解决方案,但这对 DFM 文件有什么帮助?谢谢
      【解决方案3】:

      我发现最简洁的方法是在代码中填充这些“特殊”标题,如果需要,您可以在其中使用 IFDEF。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-12
        • 1970-01-01
        • 2023-03-14
        • 2012-10-06
        • 2018-11-14
        • 2012-09-15
        • 2017-03-15
        • 1970-01-01
        相关资源
        最近更新 更多