4

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

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

谢谢,布赖恩

4

3 回答 3

4

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

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

于 2009-05-08T15:16:59.093 回答
3

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

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

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

于 2009-05-08T15:15:15.603 回答
2

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

于 2009-05-08T12:57:53.203 回答