将带有特殊字符的Delphi DFM迁移到D2009

时间:2009-05-08 09:51:05

标签: delphi unicode delphi-2009 dfm ohm

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

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

谢谢, 布赖恩

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:2)

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