Разбазариваю код :)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Inferno
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 26.01.2005 (Ср) 1:06

Разбазариваю код :)

Сообщение Inferno » 26.07.2005 (Вт) 20:05

Когда-то была проблема в конвертации корейской кодировки, используя чей-то код (Ребята спасибо), и доцарапав в него немного своего получил следующий код. Может кому пригодится и облегчит жизнь:).

Код: Выделить всё
Private Declare Function LocalAlloc Lib "kernel32.dll" (ByVal wFlags As Long, ByVal wBytes As Long) As Long
Private Declare Function LocalFree Lib "kernel32.dll" (ByVal hMem As Long) As Long
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long


Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

Private Const LMEM_ZEROINIT As Long = &H40


Public Function KoreanToUnicode(ByVal InString As String) As String
       Dim hMemLock1   As Long
       Dim iStrSize    As Long
       
       
       Dim Ptr As Integer
       Dim CountNonANSILetter As Integer
       Dim AddedSpaces As Integer
       Dim NeedConvert As Boolean
       Dim PreviousWasANSISymbol As Boolean
       
       
       CountNonANSILetter = 0
       AddedSpaces = 0
       NeedConvert = False
       
       If Asc(Mid(InString, 1, 1)) > 127 Then
          PreviousWasANSISymbol = False
          CountNonANSILetter = CountNonANSILetter + 1
       Else
         PreviousWasANSISymbol = True
       End If
       
       For Ptr = 2 To Len(InString)
         If Asc(Mid(InString, Ptr, 1)) > 127 Then
            CountNonANSILetter = CountNonANSILetter + 1 '
            PreviousWasANSISymbol = False
         Else
            PreviousWasANSISymbol = True
            If PreviousWasANSISymbol Then
               AddedSpaces = AddedSpaces + 1
               PreviousWasANSISymbol = False
            End If
         End If
       Next
       
      If ((CountNonANSILetter Mod 2) = 0) Then NeedConvert = True
       
      If NeedConvert Then
        AddedSpaces = 0
        hMemLock1 = LocalAlloc(LMEM_ZEROINIT, 255)
        iStrSize = MultiByteToWideChar(949, &H1, InString, -1, hMemLock1, 0&)
        iStrSize = iStrSize - 1
        MultiByteToWideChar 949, &H1, InString, -1, hMemLock1, iStrSize
        KoreanToUnicode = String$(Len(InString) * 2 - CountNonANSILetter + AddedSpaces, 0&)
        Call CopyMemory(ByVal KoreanToUnicode, ByVal hMemLock1, Len(InString) * 2 - CountNonANSILetter + AddedSpaces)
        Call LocalFree(hMemLock1)
     Else
        KoreanToUnicode = StrConv(InString, vbUnicode)
     End If
End Function


Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 27.07.2005 (Ср) 6:31

Надо было статейку забабахать...
А я все практикую лечение травами...

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 27.07.2005 (Ср) 7:38

Да. Вещь ценная лучше понаписать комментариев и выслать Гайдару статью.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 146

    TopList