2010-06-09 8 views
6

아무도 프로그래밍 방식으로 기본 Windows XP 코드 페이지를 변경하는 방법을 조언 할 수 있습니까? (Delphi에서이 작업을하고 있습니까?) (이것은 유니 코드가 아닌 응용 프로그램의 경우 제어판 -> 국가 별 설정 -> 언어로 이동하는 것과 같습니다.) 이 경우 Windows XP에서 프로그래밍 방식으로 기본 코드 페이지를 변경 하시겠습니까? (Delphi에서)

, 나는 중국어 (PRC)로 전환하는 등 다음 레지스트리 문자열을 쓰고 싶은 : HKLM \ 시스템 \ CURRENTCONTROLSET 제어 \ \ NLS \ 코드 페이지 ACP = 936 MACCP = 10008 OEMCP \ = 936

(정확하게 유니 코드가 아닌 코드 페이지를 변경하면 제어판에서 변경됩니다.) 변경할 필요가있는 또 다른 설정이 있어야합니다. 레지스트리에 직접 작성하는 대신 Win API 호출 (사용 가능한 경우)을 사용하는 것을 선호합니다.

또한 HKLM \ SYSTEM \ CurrentControlSet \ Control \ Nls \ Language \ 기본값 = 0804 (중국어 PRC)를 사용하지 않도록 설정했습니다.

내가 변경하지 않으

'지역'자체도 등 시간/날짜 설정, 분리 등을 바꿀 것이 아니라

내가해야하는 ANSI 응용 프로그램을 사용하고 있기 때문입니다 중국어 문자를 렌더링하고, 시스템을 자동으로 전환하는 도구를 쓰고 있습니다 (UI의 다른 측면은 그대로 유지하면서).

감사합니다. 당신이 다른 아무것도 시스템에서 실행되지 않습니다 키오스크 타입 응용 프로그램을 작성하는 경우이 적절할 것

던컨

답변

8

유일한 시간이다. 이 변경은 시스템의 다른 모든 응용 프로그램에 영향을 미칩니다. 방금 문자를 렌더링 할 필요가 직접 윈도우 API를 W 버전을 호출보다는 TCanvas와 방법을 통해 이동하여 델파이의 이전 버전을 렌더링 할 수 WideString이로를 얻을 수있는 경우

. 즉 TCanvas.TextOut 대신 DrawTextW 또는 ExtTextOutW을 호출하면 유니 코드 문자가 시스템의 ANSI 코드 페이지로 변환되지 않고 그려집니다.

보다 완벽한 옵션은 TMS Unicode Component Pack입니다. Delphi 6-2007에서 유니 코드 지원 응용 프로그램을 만들 수 있으며 W 함수를 모두 호출 할 수 있습니다. 잘 작동하며 TCanvas 나 Caption/Text 속성을 일반처럼 사용할 수 있습니다.; 유일한 차이점은 속성이 모두 WideString입니다. 그것은 원래 TNT Unicode Controls 팩이었고, 지원되지 않는 이전 버전이 here입니다.

마지막으로 Microsoft의 AppLocale 유틸리티를 사용하여 응용 프로그램에 대한 ANSI 코드 페이지를 변경할 수 있습니다. 배치 스크립트 here에서이를 호출하는 방법에 대한 자세한 내용과 nag 화면 here없이 실행하는 패치 및 명령 행 복제본 SBAppLocale이 있습니다. 그것은 작동하지만 해킹이며 다른 옵션은 장기적으로 더 좋습니다.

+0

Craig - 예,이 소프트웨어는 우리의 소프트웨어가 PC에서 실행되는 유일한 응용 프로그램입니다 (Windows 셸 외에). 문제의 ANSI 소프트웨어는 이미 작성되었으며 변경할 수 없습니다 (이 경우). Windows 코드 페이지를 전환하는 별도의 유틸리티를 작성하고 있습니다. AppLocale이 잘 보입니다.여전히 최고의 솔루션은 비 유니 코드 코드 페이지를 전환하는 것이라고 생각합니다. 그러나 제어판에서 드롭 다운 옵션을 클릭하지 않고이 작업을 수행하는 방법에 대해 잘 모릅니다. -> 국가 별 설정. 어느 방법이든 과다한 솔루션에 많은 감사드립니다! – Duncan

관련 문제