在VB6中处理区域设置的最佳方法是什么?

时间:2012-01-18 10:09:31

标签: .net vb6 internationalization

我需要以某种方式“国际化”用VB6编写的应用程序。这个I18n只针对少数国家和用户都知道,例如,他们应该使用美国小数点分隔符(。)而不是逗号(,)。日期也是一个很大的常见问题。

如果使用.NET,我的方法是在应用程序启动到en-US时设置主线程的CultureInfo。但是,在VB6中,我无法做到这一点(据我所知)。

之前有人遇到过这个问题吗?解决它的最佳方法是什么?最简单的方法,从我的POV,将覆盖我的应用程序进程的用户区域设置,但我不知道如何在VB6中这样做...

致以最诚挚的问候,

朱波罗卡

CNC中 我现在想要的是一种覆盖用户定义的区域设置的方法,仅用于我的过程

-edit2- 我尝试了这个但它不起作用(我的设置在pt-PT,十进制分隔符是逗号,我期望得到一个点(en-US)):

Private Sub Form_Load()
    SetAmerican

    Dim caralho As Double
    caralho = 1.23
    MsgBox (caralho)

    Unload Me
End Sub

Declare Function SetThreadLocale Lib "kernel32" (ByVal Locale As Long) As Long
Public Const LANG_EN_US = 1033

Public Sub SetAmerican()
    Call SetThreadLocale(LANG_EN_US)
End Sub

2 个答案:

答案 0 :(得分:0)

我们不得不为巴西的VB6应用做一些本地化。我发现测试的最简单方法是进入(Windows 7) Control Panel->Clock, Language, and Region->Change the date,time, or number format

Region and Language Settings

并更改格式。完成此操作后,数字和日期格式也相应更改,我输入的本地化信息显示在编码的位置。

注意:在Windows XP上,它是Control Panel->Regional and Language Options

答案 1 :(得分:0)

我今天遇到了这个问题(第3方程序错误),这就是我的解决方法: 在运行程序之前,我在HKCU\Control Panel\International注册表中设置了十进制和千个符号。

启动该程序后,可以安全地返回到原始设置(我不必等待它完成,只花了几分钟的时间。)

您甚至可以将批处理文件包装为:

@echo off
reg add "HKCU\Control Panel\International" /t REG_SZ /v sDecimal  /d . /f
reg add "HKCU\Control Panel\International" /t REG_SZ /v sThousand /d , /f

start PrograminhaMaroto.exe    
ping 127.0.0.1 /n 2 > NULL

reg add "HKCU\Control Panel\International" /t REG_SZ /v sDecimal  /d , /f
reg add "HKCU\Control Panel\International" /t REG_SZ /v sThousand /d . /f