Was ist der beste Weg, um den richtigen Zeichensatz für einen bestimmten LCID zur Laufzeit in VB6 zu bestimmen?

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

Frage

Ich bin die Anzeige japanische Zeichen in einer VB6-Anwendung mit dem Systemgebietsschema auf Japan und die Sprache für nicht Unicode-Programme wie Japanisch festgelegt. Ein Aufruf von GetACP () gibt korrekt 932 für Japanisch. Wenn ich die japanischen Zeichenfolgen in meine Steuerelemente legen sie angezeigt werden als „ƒAƒtƒŠƒJ,Ì- ‰ ¤“ statt „ア フ リ カ の 女王“. Wenn ich manuell die Font.Charset auf 128 gesetzt, dann zeigen sie richtig.

Was ist der beste Weg, um den richtigen Zeichensatz für einen bestimmten LCID in VB6?

, um zu bestimmen
War es hilfreich?

Lösung

Der Ausbau Bob Antwort, hier ist ein Code, den aktuellen Standard-Zeichensatz zu erhalten.

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

Andere Tipps

Der zweitbeste Weg ist, eine Datenbank von Schriften, font.charsets zu verwenden, und Heuristiken, wie hier geschehen ist:

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

(Die am besten Art und Weise ist das sinkende Schiff zu steigen, die VB6)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top