Есть ли более простой способ конвертировать Delphi 7 в Delphi 2009? - PullRequest
4 голосов
/ 20 июля 2010

Есть ли более простой способ конвертировать Delphi 7 в Delphi 2009?или есть ли способ использовать модуль Delphi 7 в проекте Delphi 2009?

У меня есть модуль в Delphi 7, но поведение все испортилось, когда я пытаюсь использовать его в своем проекте Delphi 2009.

Он имеет много различий, таких как:

 Hangul = 'ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ' +
           'ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅛㅜㅠㅡㅣ';
 ShowMessage(Copy(Hangul, 1 + (I) * 2, 2));

Показывает символы по одному в Delphi 7, но по два в Delphi 2009. Поэтому мне нужно было изменить его на:

ShowMessage(Copy(Hangul, 1 + I, 1));

но это было проще всего, это становится все более запутанным ... и алгоритм не мой, поэтому я не могу понять всю программу.

Любая помощь будетприветствуется.

РЕДАКТИРОВАТЬ: и если кто-то заинтересован, чтобы увидеть код здесь, это LINK .Это часть unit HanInput;.Он переводит ключи (на английском языке) и выводит корейские символы.И нет, я не понимаю корейский.

Ответы [ 2 ]

5 голосов
/ 20 июля 2010

Я бы посмотрел кодировку вашего файла .pas. Вы можете сделать это, например, используя Notepad ++ . Если это что-то кроме UTF-8, измените его на UTF-8, используя notepad ++. Это должно сохранить символы и сделать их читаемыми для D2009. Да, и убедитесь, что спецификация байтов (UTF-8) включена.

Не уверен, будет ли файл по-прежнему использоваться в D7, хотя ... (Не знаю, когда была добавлена ​​поддержка UTF-8 в IDE).


Строки Hangul в вашем примере и блок HanInput по вашей ссылке имеют два байта на символ. Это говорит мне о том, что они предназначены для кодирования UTF-16.

Это как бы подтверждается вызовами MultiByteToWideChar, даже если они используются в аргументах, а не в константах. Если вы действительно кодируете UTF-16 в функции, вы можете избавиться от этого вызова, но вам все равно нужно найти способ справиться с константами.

Работа с константами - я не вижу слишком много в этом модуле HanInput - может быть такой же простой, как копирование строк в новый файл Notepad ++ с кодировкой Ansi, изменение его кодировки на UTF-8 и затем копирование строк обратно к вашему подразделению. Возможно, вы захотите убедиться, что сначала вы скопировали все строки в новый файл notepad ++, затем преобразовали их, а затем скопировали обратно, поскольку редактор IDE, вероятно, спросит вас, хотите ли вы изменить формат единиц на UTF-8, и это может привести к искажению константы.

4 голосов
/ 20 июля 2010

В D7 Sizeof (Char) равно 1, а в D2009 - 2. Так что это должно помочь вам:

ShowMessage(Copy(Hangul, 1 + (I) * Sizeof(Char), Sizeof(Char)));
...