Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2009, 09:42   #1
ЯИмя
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 15
Стрелка Unicode в Listboxe

Старая тема:
Не могу вставить в контрол текст в кодировке Unicode

Пробовал написать код в VB6 (без экселя).

Код должен переносить слова из файла source.txt в Listbox.
Если я сохраняю txt в кодировке ANSII, то всё нормально, а в Unicode - никак.
Текст должен быть в Unicode, поскольку в нём содержатся буквы ä, ö.

Чтобы узнать, код или контрол не видит этих символов, я вставил в код строку
Код:
Debug.Prnt Temp
в окне Immediate
(Temp - переменная, которой присваивается строковое значение).

Он мне пишет вместо букв с умляутами козябры. То есть код не распознаёт. Ну, и соответственно, в Listbox он вставляет всё те же козябры.

Вот пример интерпретации бейсиком выражения Hyvää päivää:
яюHyvдд pдivдд
(Причём буквы яю в начале почему-то присутствуют при любом раскладе).

Пробовал ввести с клавиатуры буквы ä, ö в Textbox. Вводятся a, o.

При этом, когда похожий код пишешь в Excele, то работает всё прекрасно (только там код берёт слова с листа excel).

Поискал я по форуму, похожие вопросы уже не раз поднимались. Там советовали подключить библиотеку FM20.dll, и всё, якобы должно получиться.
Подключил.
Без изменений.

Неужели нельзя обойти как-нибудь данную проблему???


П.С. Сейчас попробовал вставить в текстовый файл русские буквы, получился вообще смех:
"Добрый день" = ">1@K9 45=L"

Повторяю, в excele всё работает без проблем...

Последний раз редактировалось ЯИмя; 19.02.2009 в 09:51.
ЯИмя вне форума Ответить с цитированием
Старый 19.02.2009, 10:02   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Прикрепите Ваш файл (фрагмент файла) в Unicode. Попробуем.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 19.02.2009, 13:56   #3
ЯИмя
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 15
По умолчанию

Это код:

Code.rar

А это текст в Unicode:

source.txt

Код ещё корявый, не обращайте внимания.
Я его только начал писать и вот. В Юникод воткнулся...

Последний раз редактировалось ЯИмя; 19.02.2009 в 16:59.
ЯИмя вне форума Ответить с цитированием
Старый 19.02.2009, 16:57   #4
ЯИмя
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 15
По умолчанию

А вот экселевский файл, в котором всё работает.

Excel.rar

То есть там Listbox, Textbox отображают буквы с умляутами.

Это похожий код, принцип тот же, с небольшими изменениями, связанными с ограниченностью возможностей экселевских контролов.
Код тоже недоделанный, я его написал, просто чтобы попробовать, будет ли в экселе работать.

Почему в экселе всё работает - загадка...

Последний раз редактировалось ЯИмя; 19.02.2009 в 16:59.
ЯИмя вне форума Ответить с цитированием
Старый 19.02.2009, 17:29   #5
ЯИмя
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 15
По умолчанию

Вот здесь описывается, кажется, решение этой проблемы.

http://www.cyberactivex.com/UnicodeTutorialVb.htm

Я в английском не силён, если у кого есть время, может быть, посмотрите?
ЯИмя вне форума Ответить с цитированием
Старый 20.02.2009, 08:45   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Попробуйте вместо примененного у Вас
Код:
Open App.Path & "\source.txt" For Input As #F
использовать метод OpenTextFile объекта FileSystemObject. У этого метода есть параметр, отвечающий за кодировку открываемого файла. Например:
Код:
Dim fso As FileSystemObject, stream
Set fso = CreateObject("Scripting.FileSystemObject")
Set stream = fso.OpenTextFile("source.txt", ForReading, True, TristateTrue)
MyString = stream.ReadLine 'читаем строку
...
...
stream.Close
Здесь опция TristateTrue означает "Открытие в кодировке Unicode".
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 21.02.2009, 19:29   #7
ЯИмя
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 15
По умолчанию

Ладно, предположим, справился я со считыванием строк в код.

Хотя и вышел из положения не самым лучшим образом, но, по крайней мере, теперь почти уверен, что в памяти VB хранятся символы в юникоде.
Я взял исходный source.txt и заменил там все буквы ä на @, а буквы ö - на #.
При формировании коллекции строк использовал функцию Replace:
Код:
    Temp = Replace(Temp, "@", ChrW(228))
    Temp = Replace(Temp, "#", ChrW(246))
Но вставить символы в Юникоде в контрол по-прежнему не получается.
Теперь код вместо козябров вставляет в listbox простые буквы a и o, без умляутов.

ПОЧЕМУ ЖЕ В ЭКСЕЛЕ-ТО ВСЁ БЕЗ ПРОБЛЕМ РАБОТАЕТ?

Там что, контролы другие, чем же они отличаются???
ЯИмя вне форума Ответить с цитированием
Старый 21.02.2009, 19:56   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
ПОЧЕМУ ЖЕ В ЭКСЕЛЕ-ТО ВСЁ БЕЗ ПРОБЛЕМ РАБОТАЕТ?

Там что, контролы другие, чем же они отличаются???
Да. В VB и в VBA совершенно разные элементы управления.
И, хоть выглядят они похоже, по сути представляют из себя совершенно разные объекты.
Об этом говорилось здесь.
EducatedFool вне форума Ответить с цитированием
Старый 23.02.2009, 12:11   #9
ЯИмя
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 15
По умолчанию

Всем спасибо!

Вроде бы как нашли выход из положения всеобщими усилиями.

Одно не получается - написать в Textboxe, взятому из FM20.dll, русские буквы (с клавиатуры).

Прикреплю файл с кодом, огромная просьба, будьте добры, посмотрите, что можно сделать?...

Мне нужно, чтобы можно было вводить в Textbox3:
1. Русские буквы;
2. В английской раскладке - кроме стандартных ANSI символов ещё всего две буквы - ä и ö.

SAN.rar

Повторяю - контрол (Textbox) Экселевский и в экселе он работает прекрасно, принимает любые буквы. А при переносе его в VB6 вдруг начинает принимать только английские, а вместо остальных - печатает козябры.

Всю ночь мучался...
ЯИмя вне форума Ответить с цитированием
Старый 23.02.2009, 16:17   #10
ЯИмя
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 15
По умолчанию

Ну господа, очень прошу откликнуться!!!
ЯИмя вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Unicode в Delphi Fedorovich БД в Delphi 2 31.10.2008 21:34
Unicode и Delphi BOBAH13 Общие вопросы Delphi 3 27.09.2008 13:08
Unicode в indy9 Mixasik Работа с сетью в Delphi 3 25.08.2008 15:44
unicode и printf Legat Общие вопросы C/C++ 9 06.07.2008 13:41
Unicode }{UTPUU Общие вопросы Delphi 4 02.04.2007 15:21