 |
请看下面的例子:
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, 其他方面, 。
|