Delphi + Windows UNICODE = ?
От: xitsmex  
Дата: 22.07.06 06:56
Оценка:
Здравствуй, ALL!

Имеется следующая проблема: кладем на форму Edit, задаем FONT -> CHARSET -> GREEK_CHARSET. Теперь мы не можем ввести ничего кроме как на греческом чарсете, нажимание клавиатуры в русской раскладке так же вводит греческие буквы, согласен, мы же не в UNICODE, именно это поведение мне и нужно. Теперь кладем на форум милый компонент XPManifest, заменив тем самым библиотеку работы с компонентам и обнаруживаем, что текст можно вводить в Edit на РАЗНЫХ языках и в РАЗНЫХ чарсетах, но вот при преобразовании его в Tedit.text, имеющий тип string из типа WideString внутри windows используется кодовая страница языка, выбранного в региональных настройках как язык для non-unicode программ, соответственно, вместо греческого получаем ??. (Например, присваивая label1.caption := Edit1.text.) Ситуация усложняется тем, что это не обычный Edit, а cxInnerTextEdit от DevExpress, находящийся внутри cxTextEdit и VeticalGrid. Данную проблему (с вводом греческого языка, да, кстати, проблема состоит в том, чтобы ракзрешить пользователю набирать только на одном языке, а потом получить этот текст не ввиде вопросов, можно в ввиде UNICODE) я решил, унаследовав cxInnerTextEdit от TnTCustomEdit (TnTWare Delphi UNICODE Controls), а точнее — от его производного класса, который теперь служит преобразователем задание текста в ANSI -> конвертация в UNICODE -> ввод текста в UNICODE -> конвертация в ANSI. Но обнаружилось, что так же надо сделать и для Memo с его TMemoString и для некоторых других компонентов. Хотелось бы узнать вот что:
1. Можно ли вытащить UNICODE текст из этого нового Edit? SendMessageW не помогает, длину Result ставит нормальную, а пишет туда бред. Windows, несмотря на явную UNICOD`ность окна, на IsWindowUnicode возвращает false. А то решение с преобразованием вовсе не эстетично.
2. Может, кто-то прикручивал к DevExpress хоть немножео UNICODE?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.