谁能建议如何以编程方式更改默认的 Windows XP 代码页(我是在 Delphi 中执行此操作)? (这相当于进入控制面板 -> 区域设置 -> 非 Unicode 应用程序的语言)。
在这种情况下,我想切换到中文(中国),因此正在写入以下注册表字符串:
HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage\
ACP=936
MACCP=10008
OEMCP=936
(这正是更改控制面板中的非 Unicode 代码页下拉列表所做的操作)。必须有另一个我需要更改的设置 - 而且我更喜欢使用 Win API 调用(如果可用)而不是自己写入注册表。
我也尝试过设置
HKLM\SYSTEM\CurrentControlSet\Control\Nls\语言\
默认=0804(中国)无济于事。
我不想更改“区域设置”本身,因为这也会更改时间/日期设置、分隔符等。
这是因为我正在使用需要渲染中文字符的 ANSI 应用程序,并且我正在编写一个工具来自动切换系统显示字符(同时保持 UI 的其他方面完好无损)。
Thanks!
Duncan
唯一合适的情况是,如果您正在编写一个信息亭类型的应用程序,系统上不会运行其他任何东西。该更改将影响系统上的所有其他应用程序。
如果您只需要渲染字符并可以将它们放入 WideString 中,您可以通过调用旧版本的 Delphi 来渲染它们W直接使用 Windows API 的版本,而不是通过 TCanvas 方法。也就是说,调用DrawTextW
or ExtTextOutW
代替TCanvas.TextOut
它会绘制 Unicode 字符,而不将它们转换为系统的 ANSI 代码页。
更完整的选项是TMS Unicode 组件包 http://www.tmssoftware.com/site/tmsuni.asp。它支持在 Delphi 6-2007 中创建支持 Unicode 的应用程序,并处理调用所有W为您提供功能。它运行良好,您可以像平常一样使用 TCanvas 或标题/文本属性。唯一的区别是属性都是 WideStrings。这最初是 TNT Unicode 控件包,并且有一个较旧的、不受支持的版本可用here http://www.yunqa.de/delphi/doku.php/products/tntunicodecontrols/index.
最后,您可以使用微软的用于更改您的应用程序的 ANSI 代码页的实用程序。有从批处理脚本调用它的详细信息here http://www.codeproject.com/KB/vb/apploc_automation.aspx,一个在没有导航屏幕的情况下运行它的补丁here http://opcode0x90.wordpress.com/2008/01/09/patch-for-applocale/,以及一个名为的命令行克隆SB应用程序语言环境 http://www.steelbytes.com/?mid=45。它有效,但它是一个黑客,其他选择从长远来看更好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)