VB6での実行時に与えられたLCIDの正しい文字セットを決定するための最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/377779

質問

私は日本に設定しシステムロケールや日本などの非Unicode対応でないプログラムの言語でのVB6アプリケーションで日本語の文字を表示しています。 GetACPへの呼び出しは()が正しく日本語に932を返します。私は私のコントロールに日本語の文字列を挿入すると、彼らは「ƒAƒtƒŠƒJ,Ì-‰¤」ではなく「アフリカの女王」として表示されます。私は手動で128にFont.Charsetを設定する場合、それらが正しく表示されます。

VB6内の指定されたLCIDの正しい文字セットを決定するための最良の方法は何ですか?

役に立ちましたか?

解決

ボブの答えを拡大、ここでは現在のデフォルトの文字セットを取得するためのいくつかのコードです。

Private Const LOCALE_SYSTEM_DEFAULT As Long = &H800
Private Const LOCALE_IDEFAULTANSICODEPAGE As Long = &H1004
Private Const TCI_SRCCODEPAGE = 2

Private Type FONTSIGNATURE
    fsUsb(4) As Long
    fsCsb(2) As Long
End Type

Private Type CHARSETINFO
    ciCharset As Long
    ciACP As Long
    fs As FONTSIGNATURE
End Type

Private 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

Private Declare Function TranslateCharsetInfo Lib "GDI32" ( _
    lpSrc As Long, _
    lpcs As CHARSETINFO, _
    ByVal dwFlags As Long _
) As Long

Public Function GetCharset() As Long
On Error GoTo ErrorHandler

    Dim outlen As Long
    Dim lCodepage As Long
    Dim outBuffer As String
    Dim cs As CHARSETINFO

    outBuffer = String$(10, vbNullChar)
    outlen = GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_IDEFAULTANSICODEPAGE, outBuffer, Len(outBuffer))

    If outlen > 0 Then
        lCodepage = val(Left$(outBuffer, outlen - 1))

        If TranslateCharsetInfo(ByVal lCodepage, cs, TCI_SRCCODEPAGE) Then
            GetCharset = cs.ciCharset
        End If
    End If

    Exit Function

ErrorHandler:
    GetCharset = 0
End Function

他のヒント

第二の最良の方法は、ここで行われているように、フォント、font.charsets、およびヒューリスティックのデータベースを使用することです

http://www.example-code.com/vb /vb6-display-unicode.aspする

の最高の方法VB6で沈没船を降りることです)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top