Нужен контрол для ввода текста с Unicode символами
я по поиску прошелся вроде бы был на эту тему пост:
http://forum.codenet.ru/showthread.php?s=&threadid=18138
Но конкретного ответа к нему нет.
Проблема:
окружение:
в Win XP устанавливается дополнительный язык -Казахский, у которого нет собственной кодировки, и до XP исхитрялись cp1251 + спецшрифт, заменяющий образы редкоиспользуемых символов на 9 специфичных для языка). XP эту проблему решает через юникод-символы для казахского языка.
непосредственно проблема:
Пользователи хотят вводить некоторый текст в форме VB приложения на казахском языке. Стандартный Text рисует натуральные ?(вопросы с кодом 63) вместо нужных символов.
Нашел в и-нете упоминание, что RichTextBox понимает unicode. Действительно, если вставляешь из клипборда(ctrl+v) в него юникод строку - отображает нормально, и в .TextRTF двухбайтовый код нужных символов видно. Однако с клавиатуры эти символы вводятся некорректно - опять вопросы.
Есть идея - попробовать перехватывать нажатие клавиш и самому RTF-ом писать, но даже в этом случае через свойство .Text возвращаются вопросы - короче геморрой.
Может у кого-нибудь еще есть идеи как решить эту проблему или может кто посоветует ActiveX контрол какой-нибудь?
Время у меня было 2 дня, посему нельзя сказать что проблему решил - скорее муляж поставил:
На одном индусском сайте нашел такую-же проблему, пост примерно от того же времени (неверное мой ментальный двойник :) ) - умные гуру-индусы объяснили почему лажа такая происходит, пару слов насоветовали и послали на сайт http://www.cyberactivex.com/UnicodeTutorialVb.htm
В общем, прикрутил я unicode-aware TextEdit из Forms 2.0 Object Library, и написал тупой обработчик нажатий клавиш для блокировки кодов, которые Windows посылает в ansi-форму VB. Я мапировал в зависимости от KeyboardLayout эти коды в соответствующие Unicode-символы и записывал в свойство text.
Выглядит так - как будто работает :).
А проблема в том, что судя по всему VB регистрирует класс формы через Ansi версию функции RegisterClass (RegisterClassA), а значит IsWindowUnicode возвращает False и система сама мапирует Unicode коды в соответствующие Ansi коды перед посылкой форме сообщения.