프로덕션 환경에있는 VB6의 응용 프로그램이 있습니다.이 응용 프로그램은 PC의 국가 별 설정을 읽고 있습니다. 하지만 이제는 PC의 설정을 변경하지 않고 응용 프로그램의 다른 국가 별 설정을 지정해야합니다.Visual Basic 6.0 응용 프로그램에서 국가 별 옵션을 어떻게 설정합니까?
영향을 최소화하면서 어떻게 새 국가 별 설정을 전체적으로 설정할 수 있습니까? 어떤 구성 방법 (또는 이와 비슷한)이 있습니까?
프로덕션 환경에있는 VB6의 응용 프로그램이 있습니다.이 응용 프로그램은 PC의 국가 별 설정을 읽고 있습니다. 하지만 이제는 PC의 설정을 변경하지 않고 응용 프로그램의 다른 국가 별 설정을 지정해야합니다.Visual Basic 6.0 응용 프로그램에서 국가 별 옵션을 어떻게 설정합니까?
영향을 최소화하면서 어떻게 새 국가 별 설정을 전체적으로 설정할 수 있습니까? 어떤 구성 방법 (또는 이와 비슷한)이 있습니까?
http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_21841979.html
Option Explicit
Public Enum DateOrderEnum
doDefault 'Your locale setting
doMDY 'Month-Day-Year (U.S.)
doDMY 'Day-Month-Year (EU, S.A.)
doYMD 'Year-Month-Day (Japan)
End Enum
Public Const LOCALE_SSHORTDATE As Long = &H1F
Public Const LOCALE_STHOUSAND As Long = &HF
Public Const LOCALE_SDECIMAL As Long = &HE
Public Declare Function GetUserDefaultLCID Lib "kernel32"() As Long
Public Declare Function GetSystemDefaultLCID Lib "kernel32"() As Long
Public Declare Function GetLocaleInfoA Lib "kernel32" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
Public Function GetThousandsSep() As String
GetThousandsSep = pfGLI(GetUserDefaultLCID(), LOCALE_STHOUSAND)
End Function
Public Function GetDecimalSep() As String
GetDecimalSep = pfGLI(GetUserDefaultLCID(), LOCALE_SDECIMAL)
End Function
'Purpose: Assume a date string with English separator "1/4/2006"
'Returns: Correct Date Variable
Public Function ResolveDate(ByVal sDate As String) As Date
Dim sArray() As String
If InStr(sDate, "/") Then 'Potentially a date string
sArray = Split(sDate, "/")
Debug.Print "GetUserDefaultLCID", GetUserDefaultLCID
Debug.Print "GetSystemDefaultLCID", GetSystemDefaultLCID
If UBound(sArray) = 2 Then 'We have 3 parts
Select Case ShortDateOrder2
Case doMDY '
ResolveDate = DateSerial(sArray(2), sArray(0), sArray(1))
Case doDMY
ResolveDate = DateSerial(sArray(2), sArray(1), sArray(0))
Case doYMD
ResolveDate = DateSerial(sArray(0), sArray(1), sArray(2))
End Select
End If
End If
End Function
'Purpose: Assume a number string with English separators "123,456.78"
'Returns: Correct Double Variable
Public Function ResolveNumber(ByVal sNum As String) As Double
Dim sTS As String
Dim sDS As String
sTS = GetThousandsSep
sDS = GetDecimalSep
If (sTS = ",") And (sDS = ".") Then 'English
'format is OK
Else
Dim i As Long
Dim sMid As String
For i = 1 To Len(sNum)
Select Case Mid(sNum, i, 1)
Case ","
Mid(sNum, i, 1) = sTS
Case "."
Mid(sNum, i, 1) = sDS
End Select
Next
End If
ResolveNumber = CDbl(sNum)
End Function
Public Function ShortDateOrder2() As DateOrderEnum
'Get ShortDateOrder the hard way
Dim sShort As String
Dim qOn As Boolean
Dim i As Integer
Dim sChar As String
On Error Resume Next
'Get the Short Date format
sShort = pfGLI(GetUserDefaultLCID(), LOCALE_SSHORTDATE)
For i = 1 To Len(sShort)
sChar = Mid(sShort, i, 1)
'Ignore items in single quotes (if any)
If sChar = "'" Then
qOn = Not qOn
Else
If Not qOn Then
Select Case sChar
Case "d"
ShortDateOrder2 = doDMY
Exit Function
Case "m"
ShortDateOrder2 = doMDY
Exit Function
Case "y"
ShortDateOrder2 = doYMD
Exit Function
End Select
End If
End If
Next
End Function
Private Function pfGLI(ByVal m_LocaleLCID As Long, ByVal reqInfo As Long) As String
Dim Buffer As String * 255
GetLocaleInfoA m_LocaleLCID, reqInfo, Buffer, 255
pfGLI = StripNull(Buffer)
End Function
Public Function StripNull(ByVal StrIn As String) As String
Dim nul As Long
nul = InStr(StrIn, vbNullChar)
Select Case nul
Case Is > 1
StripNull = Left$(StrIn, nul - 1)
Case 1
StripNull = ""
Case 0
StripNull = Trim$(StrIn)
End Select
End Function
'Select Case sChar'는 'Select Case LCase (sChar)'를 안전한쪽으로 변경하는 것이 좋습니다. 어떻게 생각해? –
Dependsing에서 당신이 실제로 달성하기 위해 노력하고 무엇에, 당신은 당신의 시작 절차에 SetThreadLocale()
를 호출 시도 할 수 있습니다.
나는 그렇게 생각하지 않습니다. 특히 VB6에서 ANSI 컨트롤에 사용하는 비 유니 코드 응용 프로그램의 로캘입니다. – wqw