ما هي أفضل طريقة لتحديد محارف الصحيح لLCID معين في وقت التشغيل في VB6؟

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

سؤال

وأنا عرض الأحرف اليابانية في تطبيق VB6 مع لغة النظام المقرر أن اليابان ولغة لبرامج غير يونيكود كما اليابانية. دعوة إلى GetACP () إرجاع بشكل صحيح 932 للغة اليابانية. عندما أقوم بإدخال السلاسل اليابانية في ضوابط بلدي لأنها تكشف بأنها "ƒAƒtƒŠƒJ،Ì- ‰ ¤" بدلا من "ア フ リ カ の 女王". إذا كنت يدويا تعيين Font.Charset إلى 128 بعد ذلك عرض بشكل صحيح.

ما هي أفضل طريقة لتحديد محارف الصحيح لLCID الواردة في VB6؟

هل كانت مفيدة؟

المحلول

والتوسع الجواب بوب، وهنا بعض التعليمات البرمجية للحصول على محارف الافتراضي الحالي.

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