我的Delphi(XE 10)程序使用nonunicode(单字节)遗留火鸟数据库(字符集NONE),因此它的数据(即从中读取或保存到数据库)取决于Windows区域为nonunicode程序。根据此Windows设置,相同的数据库字符可以在程序中显示为\ u0101(正确)或\ u0432(即不正确)。 IBX用作数据库访问技术。SetThreadLocale整个Delphi应用程序
我的程序只适用中的指定地方进行nonunicode方案,这是客户端可以接受的。问题是 - 无论Windows设置如何,我都可以让程序感受特定的预定义语言环境?
我想,我应该使用SetThreadLocale
这一点。但是在哪里放这个电话?在主窗体的初始化部分调用这个函数是足够的还是应该在项目源文件(应用程序被初始化)中调用它,或者我应该在每个模块的初始化部分调用它?
由于意见我意识到的GetThreadLocale returns different value than GetUserDefaultLCID? 我现在明白,我应该写更多的代码:
SetThreadLocale(my_preferred_locale_id);
SysLocale.DefaultLCID := my_preferred_locale_id;
GetFormatSettings;
但主要的问题仍然存在 - 在那里把这段代码 - 我应该把它进入多个地方。我有WebSnap应用程序,我猜它可以在自动和复杂的踏板管理下进行。代码应该去哪里?
没有什么帮助:
- 加入LC_CTYPE = WIN1257到TIBDatabase.Params
- 设置SetThreadLocale ......这里,那里到处
- 设置项目选项 - 版本信息 - 语言 - 区域设置ID
https://github.com/xupefei/Locale-Emulator区域设置仿真器是解决问题的唯一工具,但为什么德尔福不允许这样做没有外部工具?
这个答案http://stackoverflow.com/a/2947349/368364可能会给你一个更大的图片。 – RBA
这可能也与此有关http://superuser.com/questions/167950/changing-windows-locales-on-a-per-process-basis – JensG
有作为XE10 –