My Unicode(シングルバイト)レガシーFirebirdデータベース(文字セットNONE)を使用するため、そのデータ(読み込みまたはデータベースに保存される)は、非ユニコードプログラムこのWindowsの設定によっては、同じデータベース文字が\ u0101(正しい)または\ u0432(正しくない)としてプログラムに表示されます。 IBXはDBアクセス技術として機能します。Delphiアプリケーション全体のSetThreadLocale
私のプログラムは、非ユニコードプログラム用の特定のローカルでのみ動作し、クライアントでも問題ありません。質問は - どのようにプログラムは、Windowsの設定に関係なく、特定の定義済みのロケールを感じるようにすることができますか?
私はこのためにSetThreadLocale
を使うべきだと思います。しかし、どこにこの電話をかけるのですか?メインフォームの初期化セクションでこの関数を呼び出すだけで十分ですか?または、プロジェクトソースファイル(アプリケーションが初期化されている場所)で呼び出すか、各モジュールの初期化セクションで呼び出す必要がありますか?このコードをどこに置くか - - 私はそれを置く必要があります
SetThreadLocale(my_preferred_locale_id);
SysLocale.DefaultLCID := my_preferred_locale_id;
GetFormatSettings;
しかし、主な疑問が残っている:私は、私は今、私はもう少しコードを書く必要があることがわかりGetThreadLocale returns different value than GetUserDefaultLCID? を知らされたコメントのおかげで
複数の場所に。私はWebSnapアプリケーションを持っていて、自動で複雑なトレッド管理ができると思います。コードはどこに行くべきですか?
何も助けなかっ:
- 追加LC_CTYPE = WIN1257をTIBDatabase.Params
- にプロジェクトオプション設定SetThreadLocale ...ここでは、そこに、どこでも
- 設定 - バージョン情報 - 言語 - ロケールIDを
https://github.com/xupefei/Locale-Emulatorロケールエミュレータは、問題を解決する唯一のツールですが、なぜDelphiは外部ツールなしでこれを実行することはできませんか?
この回答はhttp://stackoverflow.com/a/2947349/368364でご覧いただけます。 – RBA
これも関連している可能性がありますhttp://superuser.com/questions/167950/changing-windows-locales-on-a-per-process-basis – JensG
XE10のようなものはありません –