Программирование на 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