Программно измените кодовую страницу по умолчанию в Windows XP? (от Delphi)

Кто-либо мог советовать, как программно изменить кодовую страницу Windows XP по умолчанию (я делаю это от Delphi)? (Это было бы эквивалентом входа в Панель управления-> Региональные настройки-> Язык для приложений не-Unicode).

В этом случае я хочу переключиться на китайский язык (PRC), и так пишу в следующие строки реестра: HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage\ACP=936 MACCP=10008 OEMCP=936

(Который является точно, что изменение кодовой страницы не-Unicode, выпадающей в Панели управления, делает). Должны быть другие настройки, которые я должен изменить - и я предпочел бы использовать вызов API Победы (при наличии) вместо того, чтобы писать в реестр сам.

Я также попробовал установку HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language\Default=0804 (китайский PRC) напрасно.

Я не хочу изменять 'локаль' по сути, поскольку это также изменит время / настройки даты, разделители, и т.д. и т.д.

Это вызвано тем, что я использую приложение ANSI, которое должно представить китайские символы, и я пишу, что инструмент для автоматического переключения системы показывает символы (при оставлении других аспектов UI неповрежденными).

Спасибо!

Duncan

6
задан Duncan 9 June 2010 в 16:14
поделиться

1 ответ

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

Если вам просто нужно визуализировать символы и вы можете передать их в WideString, вы можете визуализировать их в более старых версиях Delphi, вызывая версии W Windows API напрямую, а не через TCanvas методы. То есть вызовите DrawTextW или ExtTextOutW вместо TCanvas.TextOut , и он будет рисовать символы Unicode без преобразования их в кодовую страницу ANSI системы.

Более полный вариант - Пакет компонентов Unicode TMS . Он поддерживает создание приложений с поддержкой Unicode в Delphi 6-2007 и обрабатывает вызов всех функций W за вас. Он работает хорошо, и вы можете просто использовать свойства TCanvas или Caption / Text, как обычно .; единственная разница в том, что все свойства - это WideStrings. Изначально это был пакет TNT Unicode Controls, и его более старая неподдерживаемая версия доступна здесь .

Наконец, вы можете использовать утилиту Microsoft AppLocale , чтобы изменить кодовую страницу ANSI только для вашего приложения. Подробная информация о вызове его из пакетного сценария здесь , патч для его запуска без экрана nag здесь и клон командной строки с именем SBAppLocale . Это работает, но это взлом, и другие варианты лучше в долгосрочной перспективе.

8
ответ дан 16 December 2019 в 21:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: