6

誰かがプログラムでデフォルトのWindowsXPコードページを変更する方法をアドバイスできますか(私はDelphiからこれを行っています)?(これは、[コントロールパネル]->[地域の設定]->[Unicode以外のアプリケーションの言語]に移動するのと同じです)。

この場合、中国語(PRC)に切り替えたいので、次のレジストリ文字列に書き込みます:HKLM \ SYSTEM \ CurrentControlSet \ Control \ Nls \ CodePage \ ACP = 936 MACCP = 10008 OEMCP = 936

(これは、コントロールパネルの非Unicodeコードページドロップダウンを変更することとまったく同じです)。変更する必要のある別の設定が必要です。レジストリに自分で書き込むのではなく、Win API呼び出し(使用可能な場合)を使用したいと思います。

また、HKLM \ SYSTEM \ CurrentControlSet \ Control \ Nls \ Language \ Default = 0804(中国語PRC)を無効に設定してみました。

「ロケール」自体は変更したくありません。これにより、時刻/日付の設定、区切り文字なども変更されます。

これは、漢字をレンダリングする必要があるANSIアプリケーションを使用しており、システムが文字を表示するように自動的に切り替えるツールを作成しているためです(UIの他の側面はそのままにします)。

ありがとう!

ダンカン

4

1 に答える 1

9

これが適切なのは、システム上で他に何も実行しないキオスク タイプのアプリケーションを作成している場合のみです。その変更は、システム上の他のすべてのアプリケーションに影響します。

文字をレンダリングする必要があり、それらを WideString に入れることができる場合は、TCanvas メソッドを使用するのではなく、Windows APIのWバージョンを直接呼び出すことによって、古いバージョンの Delphi でレンダリングできます。つまり、 andの代わりにDrawTextWorを呼び出すと、システムの ANSI コードページに変換せずに Unicode 文字が描画されます。ExtTextOutWTCanvas.TextOut

より完全なオプションはTMS Unicode Component Packです。Delphi 6-2007 での Unicode 対応アプリケーションの作成をサポートし、すべてのW関数の呼び出しを処理します。これはうまく機能し、通常のように TCanvas または Caption/Text プロパティを使用できます。; 唯一の違いは、プロパティがすべて WideString であることです。これはもともと TNT Unicode Controls パックでしたが、サポートされていない古いバージョンがここで入手できます。

最後に、Microsoft のAppLocaleユーティリティを使用して、アプリケーションだけの ANSI コードページを変更できます。バッチ スクリプトから呼び出す方法の詳細はこちら、nag 画面なしで実行するためのパッチはこちら、 SBAppLocaleという名前のコマンド ライン クローンがあります。それは機能しますが、それはハックであり、他のオプションは長期的には優れています.

于 2010-06-09T17:59:13.353 に答える