xitsmex
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Здравствуй, 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? |