Другим решением является использование TntControls.Это набор стандартных элементов управления Delphi, улучшенных для поддержки Unicode.Вам нужно будет просмотреть все ваши файлы форм и заменить
Button1: TButton
Label1: TLabel
на TTntButton, TTntLabel и так далее.
Обратите внимание, что в настоящее время не только китайский язык не будетРабота.Попробуйте любой язык, использующий символы, отличные от стандартного европейского набора (латинский + знаки напряжения и т. Д.), Например русский.
Но
Заменив элементы управления, вы решите одну часть проблемы.Другая часть заключается в том, что везде, где вы используете «string» или «AnsiString» и «char / pchar» или «AnsiChar / PAnsiChar», вы можете хранить только строки в кодировке системы по умолчанию.
Например, если ваша системакодировка («Язык для программ, не поддерживающих Юникод») - EN / US, русские символы будут заменены на вопросительные знаки при назначении их для переменной «string»:
a: WideString;
b: string;
...
a := 'ЯУЭФЫЦ'; //WideString can store international characters
b := a; //string cannot, so the data is lost - you cannot restore it from just "b"
Для хранения строковых данных, которые являются независимымикодирования системы, используйте WideString / WideChar / PWideChar и соответствующие функции .Если у вас есть
a, b: WideString;
...
a := UpperCase(b);
, тогда информация Юникода будет по-прежнему потеряна, потому что UpperCase () принимает «строку»:
function UpperCase(const S: string): string;
Ваша WideString будет преобразована в «строку» (при этом теряются всесимволов), переданный в UpperCase, тогда результат будет преобразован обратно в WideString, но уже слишком поздно.
Поэтому необходимо заменить все строковые функции на широкие версии:
a := WideUpperCase(b);
(для некоторых функций их широкие версии недоступны или называются по-разному, TntControls также содержат несколько версий широких функций)