软件注册站
热情软件屋

 
如何动态设置小数点的符号
编号: QA001891    
建立日期: 1999年10月22日 最后修改日期: 2005年8月22日
所属类别: Visual Basic - 其他方面
   
    操作系统:Germany Windows 95
    工具:VB4(32bit)
    问题:我用VB4(32Bit)编写了一个程序,在德文WIN95下工作。我的问题是:德国的小数点的符号不是通常用的点号而是用逗号,因此当数据以文件的形式存盘后,所有的小数点号都改为逗号了,当其他的程序再来读取这些数据时将出错。因此我只好在每次运行这个程序前,用手动的方式,打开控制面板来修改其小数点的定义,程序运行完毕后,再又改回去。后来我在程序中改用Shell Shell32.dll来调出控制面板,但还是要手动来改。因此我想请教您,能否有一种办法(如调用API),直接在程序中自动来修改?就向动态修改屏幕的解析度一样。谢谢您的答复!(Zhang Hong)
   
    请看下面的例子:
    
    1. 在你的.bas模块中声明下面的函数和常数:
    
     Public Const LOCALE_SDECIMAL = &HE ' decimal separator
     Public Const WM_SETTINGCHANGE = &H1A ' same as the old WM_WININICHANGE
     Public Const HWND_BROADCAST = &HFFFF& ' boardcast the message
    
     Public Declare Function SetLocaleInfo Lib "kernel32" Alias _
     "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As _
     Long, ByVal lpLCData As String) As Boolean
     Public Declare Function PostMessage Lib "user32" Alias _
     "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
     ByVal wParam As Long, ByVal lParam As Long) As Long
     Public Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
     Public Declare Function GetLocaleInfo Lib "kernel32" Alias _
     "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, _
     ByVal lpLCData As String, ByVal cchData As Long) As Long
    

    2. 在改变到标准的设置(US)之前:
     Dim lngLCID As Long
     Dim lngError As Long
     Dim strDecimal As String
     lngLCID = GetSystemDefaultLCID()
     strDecimal = " "
     lngError = GetLocaleInfo(lngLCID, LOCALE_SDECIMAL, strDecimal, 1)
    

    3. 改变为标准设置:
     lngError = SetLocaleInfo(lngLCID, LOCALE_SDECIMAL, ".")
    4. 广播你的设置:
     PostMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0
    

    5. 做其他你想做的事情
     ... ... ... ...
    6. 改变回你原来的设置:
     lngError = SetLocaleInfo(lngLCID, LOCALE_SDECIMAL, strDecimal)
    

    7. 广播你的变化:
     PostMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0
    

    
    NewViewStudio的意见:
    其实有个变通的方法解决你当前这个程序的遗憾。在存盘数据上下文章,你可以变更将要保存的数字为字符串(如果你必须用文本方式查看该存盘数据文件时)或变更成自定义数据类型(如果你的存盘数据还有其它字段)或干脆存以OPEN ... BINARY形式保存DOUBLE或SINGLE形式保存那些数据(如果你即不需要后期以文本形式查看也没有其它字段)。

    

此问题由James Wayne 回答。

附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, 其他方面,

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio