Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Содержимое TextBox в Unicode?


Автор: ndec 4.2.2007, 22:22
Помогите пожалуйста сохранить содержимое TextBox в кодировке Unicode. Какими способами можно это осуществить? Спасибо.

Автор: bom 4.2.2007, 23:20
С помощью API:
MultiByteToWideChar
WideCharToMultiByte

Автор: ndec 5.2.2007, 00:14
Т.е закинуть 
Код

Public Declare Function MultiByteToWideChar Lib "kernel32" Alias "MultiByteToWideChar" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As String, ByVal cchWideChar As Long) As Long
 
в модуль. Потом создать текстовую переменную и приравнять ??
Можно пример пожалуйста?

Автор: Akina 5.2.2007, 10:07
Цитата(ndec @  5.2.2007,  01:14 Найти цитируемый пост)
Можно пример пожалуйста?

В описании данной функции в MSDN есть пример ее использования

Автор: ndec 6.2.2007, 14:03
Цитата(Akina @ 5.2.2007,  10:07)
Цитата(ndec @  5.2.2007,  01:14 Найти цитируемый пост)
Можно пример пожалуйста?

В описании данной функции в MSDN есть пример ее использования

Если Вас не затруднит, могли бы Вы скинуть эту информацию сюда?

Автор: ndec 9.2.2007, 02:17
Может кто-нибудь помочь и показать пример с использованием MultiByteToWideChar ? Мне нужно чтобы TextBox сохранял информацию в кодировке Unicode.

заранее благодарю.

Автор: W4FhLF 9.2.2007, 17:13
Да вообще-то в ВБ касательно строк кроме unicode ничего и нетsmile

Автор: bom 9.2.2007, 22:33
Цитата(W4FhLF @  9.2.2007,  17:13 Найти цитируемый пост)
 в ВБ касательно строк кроме unicode ничего и нет

Действительно, ndec,  можно заюзать и  StrConv  smile  

Автор: IcyJet 9.2.2007, 23:41
Да StrConv так сказать "зе бэст вэй!" smile 
Код

Dim sInput as String
Dim sOutput as String
sOutput = StrConv(sInput, vbUnicode)

Vb изначально хранит строку в Unicode
При передачестрок в Win32Api переводит строку в ANSI (грубо говоря)
Когда мы юзаем StrConv с параметром vbUnicode а потом шлем строку в Win32Api то Win32Api получает место ANSI Unicode
Думаю что при записи файлов в vb выходит тоже самое (преоброзование в ANSI)
Используем StrConv и все должно быть Окей! smile 
З.Ы. Есле не прав поправте smile 

Автор: W4FhLF 10.2.2007, 07:45
Цитата(IcyJet @  9.2.2007,  23:41 Найти цитируемый пост)
Vb изначально хранит строку в Unicode


Если быть точнее - BSTR.

Автор: IcyJet 10.2.2007, 13:37
Да немного не точно вышло smile , но по большому счету это всеровно массив символов Unicode - от LPWSTR отличается только 4 байтами длинны впереди.
Более забавнее как vb преобразовеет строки в ANSI и обратно - все из-за того что дядюшка Билл решил зделать vb совместимым с win9x в котором как такового Unicod'а нет.  smile 

Автор: BorisVorontsov 12.2.2007, 02:53
Цитата(IcyJet @  9.2.2007,  23:41 Найти цитируемый пост)
Когда мы юзаем StrConv с параметром vbUnicode а потом шлем строку в Win32Api то Win32Api получает место ANSI - Unicode


Это самый неудачный способ из всех существующих.
Читать здесь ( всем ): http://www.vbstreets.ru/VB/Articles/66364.aspx

Цитата(IcyJet @  10.2.2007,  13:37 Найти цитируемый пост)
в котором как такового Unicod'а нет


Что значит нет?

Цитата(Джеффри Рихтер)

Windows 98 и Unicode

И все же Windows 98 допускает работу с приложениями, обрабатывающими символы и строки в Unicode, хотя вызов функций Windows при этом заметно усложняется. Например, если Бы, обращаясь к CreateWindowEx, передаете ей ANSI-строки, вызов проходит очень быстро — не требуется ни выделения буферов, ни преобразования строк. Но для вызова CreateWindowEx с Unicode-строками Вам придется самому выделять буферы, явно вызывать функции, преобразующие строки из Unicode в ANSI, обращаться к CreateWindowEx, снова вызывать функции, преобразующие строки — на этот раз ил ANSI в Unicode, и освобождать временные буферы. Так что в Windows 98 работать с Unicode не столь удобно, как в Windows 2000.

Хотя большинство Unicode-функций в Windows 98 ничего не делает, некоторые
все же реализованы Вот они:

    * EnumResourceLanguagesW
    * EnumResourceNamesW
    * EnumResourceTypesW
    * ExtTextOutW
    * FindResourceW
    * FindRcsourceExW
    * GetCharWidthW
    * GetCommandLineW
    * GetTextExtentPoint32W
    * GetTexiExtentPolntW
    * lstrlenW
    * MessageBoxExW
    * MessageBoxW
    * TextOutW
    * WideCharToMultiByte
    * MuitiByteToWideChar 



Автор: IcyJet 12.2.2007, 12:22
Цитата(IcyJet @  10.2.2007,  13:37 Найти цитируемый пост)
котором как такового Unicod'а нет

Я это и имел ввиду - просто действительно большинство Unicode-функций не делают ничего (в win9x).
А вопще что бы облегчить себе жизнь, лутчше пользоваться ANSI-входом, все таки, согласитесь, заморочек, помимо Unicod'а, в Win32Api хватает. smile 
З.ы. Статья полезная, мне понравилась smile 

Автор: suvorr 3.12.2012, 08:31
Ничего не понял.. Исходный вопрос был "как сохранить"?..  И что куда в кого преобразовывать.. Вот код:

Dim txt As String * 100: txt = "xxxx" + ChrW(178):  TextBox1 = txt:
Open "unicode.txt" For Binary As 1: Put #1, 1, txt: Get #1, 1, txt: TextBox1 = txt:

Первая строка сама по себе работает.. А после второй все плохо.. Надо полагать или Put или Get  "умничают"..
Аналогично при использовании Print  - Line Input и пр.. Что, конечно, уже не удивительно..
И как сделать хорошо?.. 
Спасибо..

Автор: suvorr 3.12.2012, 15:15
Все, понял.. Надо    Put #1,1,StrConv(txt,vbUnicode)...TextBox1=StrConv(txt,vbFromUnicode)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)