Unicode в контролах Vb6.0

Тема в разделе "Visual Basic", создана пользователем SSVSS, 22 фев 2009.

Статус темы:
Закрыта.
  1. SSVSS

    SSVSS Гость

    Кто знает, посоветуйте!

    Как вставить текст в кодировке Unicode в контрол VB?

    Имеется файл source_unicode.txt, в котором содержится текст в кодировке Unicode.
    Проблему считывания корректных символов в память VB я уже решил.
    Убедился в том, что символы хранятся в памяти VB правильно.
    Осталась проблема вывода этих символов на контрол формы VB6.0 (Listbox и Textbox).

    Проблемных символов всего два: это a и o с умляутами.

    На всякий случай приведу код, считывающий этот самый текст:
    Код (Text):
    Dim S As String
    Dim F As Integer

    Private Sub Form_Load()

    S = LoadUnicodeFile(App.Path & "\source_unicode.txt", 1035)
    Text1.Text = S
    MsgBox AscW(Mid(Text1.Text, 1, 1))
    MsgBox AscW(Mid(S, 1, 1))

    End Sub

    Public Function LoadUnicodeFile(FileName As String, Optional LocaleID As Long = 1035) As String

    F = FreeFile
    Open FileName For Binary Access Read As F
    S = Space(LOF(F) - 2)
    Seek #F, 3
    Get #F, , S
    Close #F
    LoadUnicodeFile = StrConv(S, vbFromUnicode, LocaleID)

    End Function
    Поставил в файле source_unicode.txt первым символом "а" с умляутом;
    Первый Msgbox мне выдал "97" ("а"), а второй - "228" ("а" с умляутом)

    То есть в памяти VB хранит как и надо, в Юникоде, а вот в Textbox вставляет простые буквы a и o, без умляутов, то есть преобразовывает их в ANSI.
     
  2. Gamlet

    Gamlet Well-Known Member

    Регистрация:
    8 янв 2007
    Сообщения:
    609
    Симпатии:
    0
    Переводи в нужную кодировку. Завтра функцию кину. Или возьми контрол unicode textbox(в инете есть)
     
  3. Gamlet

    Gamlet Well-Known Member

    Регистрация:
    8 янв 2007
    Сообщения:
    609
    Симпатии:
    0
    Private Function WToA(ByVal st As String, Optional ByVal cpg As Long = -1, Optional lFlags As Long = 0) As String
    Dim stBuffer As String
    Dim cwch As Long
    Dim pwz As Long
    Dim pwzBuffer As Long
    Dim lpUsedDefaultChar As Long

    If cpg = -1 Then cpg = GetACP()
    pwz = StrPtr(st)
    cwch = WideCharToMultiByte(cpg, lFlags, pwz, -1, 0&, 0&, ByVal 0&, ByVal 0&)
    stBuffer = String$(cwch + 1, vbNullChar)
    pwzBuffer = StrPtr(stBuffer)
    cwch = WideCharToMultiByte(cpg, lFlags, pwz, -1, pwzBuffer, Len(stBuffer), ByVal 0&, ByVal 0&)
    WToA = Left$(stBuffer, cwch - 1)
    End Function

    Private Function AToW(ByVal st As String, Optional ByVal cpg As Long = -1, Optional lFlags As Long = 0) As String
    Dim stBuffer As String
    Dim cwch As Long
    Dim pwz As Long
    Dim pwzBuffer As Long

    If cpg = -1 Then cpg = GetACP()
    pwz = StrPtr(st)
    cwch = MultiByteToWideChar(cpg, lFlags, pwz, -1, 0&, 0&)
    stBuffer = String$(cwch + 1, vbNullChar)
    pwzBuffer = StrPtr(stBuffer)
    cwch = MultiByteToWideChar(cpg, lFlags, pwz, -1, pwzBuffer, Len(stBuffer))
    AToW = Left$(stBuffer, cwch - 1)
    End Function


    Public Function DecodeUTF8(ByVal cnvUni As String) As String
    If cnvUni = vbNullString Then Exit Function
    DecodeUTF8 = AToW(WToA(cnvUni, CP_ACP), CP_UTF8)
    End Function
     
  4. negrem

    negrem Гость

    Может я что то неправильно делаю
    Выдает ошибку Саб или функции не определены GetACP

    Может кто чем поможет советом?
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей