Миграция Delphi DFM со специальными символами в D2009 - PullRequest
4 голосов
/ 08 мая 2009

У меня есть несколько форм Delphi, где мы используем несколько специальных символов - символ «градус» и символ «ом». Эти символы используются в надписях меток, сохраненных в файле DFM, и не создаются и не изменяются во время выполнения. Когда мы впервые спроектировали эти формы, символ степени был легким, потому что он находится в наборе символов Ansi (код 176), но символ Ом требовал использования греческого набора символов с кодом 217. К счастью (мы нашли) все другие символы, которые мы нужно (буквы и цифры) нормально работать с греческим charset.

Теперь мы бы хотели, чтобы эти формы выглядели одинаково в D2009. Символ градуса выглядит нормально, но символ ом показывает «Ù», потому что текст dfm - «Caption =» Typed in Ohms - 1234 '# 217 ». Я обнаружил, что могу отредактировать форму, добавив правильный символ в омах (8486), но, конечно, это потеряно для символа «?» возвращаясь к D7. В идеале я хотел бы сказать D2009, чтобы он продолжал использовать греческую кодировку с формой так, чтобы # 217 в dfm соответствовал символу в омах. Это возможно? Кажется, он игнорирует настройку Font.Charset, которая называется «GREEK_CHARSET». Я обнаружил грязный способ решения этой проблемы, который заключается в переборе всех компонентов и выполнении «StringReplace (S, 'Ù', OhmsChar, [rfReplaceAll])», но это ужасно, и, безусловно, должен быть лучший способ?

Спасибо, Brian

Ответы [ 3 ]

4 голосов
/ 08 мая 2009

Подобную проблему я решил, используя dxgettext . Вместо проблемных заголовков я просто использовал чистую ascii (например, «Typed in Ohms»), а затем перевел их в po-файлы, встроенные в exe как ресурсы.

Кстати, dxgettext - это хороший способ добавить переводы в приложение, с очень небольшими накладными расходами и стандартными форматами (po / mo) с хорошими редакторами 3p (poEdit). Работает с D7 и D2009.

3 голосов
/ 08 мая 2009

Как уже упоминал Брюс, вы можете использовать код для получения этих значений. Я просто привожу пример и дополнительную информацию.

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

Я советую использовать строки ресурсов, а не const для переводимого текста, потому что большинство инструментов перевода работают с ресурсами.

2 голосов
/ 08 мая 2009

Самым чистым способом, который я нашел для этого, было заполнение этих «специальных» заголовков в коде, где вы можете использовать IFDEF, если необходимо.

...