Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ввод русских слов методом виртуальной клавиатуры, ввод русских слов 
:(
    Опции темы
Vladimir1
Дата 8.2.2008, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.12.2007

Репутация: нет
Всего: нет



Здравствуйте, у меня следующая проблема:  я в эдиты ввожу слова, запускаю файл и эти слова должны записаться в определенные поля файла. С англоязычными словами все работает, а вот русские не хочет (печатает английские буквы).

Вот код функции, которая должна была писать на русском и на английском:
Код

void PutString(String s)
{
        DWORD key;
        for(int i=1; i <= s.Length(); i++)
        {
          if(!isascii(s[i]))
          {

            ActivateKeyboardLayout(LoadKeyboardLayout(IntToHex(MAKELANGID(LANG_RUSSIAN,SUBLANG_DEFAULT),8).c_str(),0),0);
           key=VkKeyScan(s[i]);
           keybd_event(key, 0, 0, 0);
           keybd_event(key, 0, KEYEVENTF_KEYUP, 0);
          }
          else
          {
           ActivateKeyboardLayout(LoadKeyboardLayout(IntToHex(MAKELANGID(LANG_ENGLISH,SUBLANG_DEFAULT),8).c_str(),0),0);
           key=VkKeyScan(s[i]);
           keybd_event(key, 0, 0, 0);
           keybd_event(key, 0, KEYEVENTF_KEYUP, 0);
          }
        }

}


Искал по форуму, нашел переключение языков, думал что 
Код

ActivateKeyboardLayout(LoadKeyboardLayout(IntToHex(MAKELANGID(LANG_RUSSIAN,SUBLANG_DEFAULT),8).c_str(),0),0);

будет переключать язык и писать русские буковки, а оно не хочет :(
Подскажите пожалуйста что тут не так.
PM MAIL   Вверх
artsb
Дата 9.2.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



А зачем печатать? Нельзя прото присвоить?
Код

Edit1->Text=s;

А раскладку можно так менять:
Код

LoadKeyboardLayout("00000409",KLF_ACTIVATE);  //английская
LoadKeyboardLayout("00000419",KLF_ACTIVATE);  //русская




--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Vladimir1
Дата 9.2.2008, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.12.2007

Репутация: нет
Всего: нет



artsb, нет, как раз наоборот, я в эдиты ввожу слова и они должны подставиться в формочку после её открытия, т.е. ситуация такая:
Код

s = Edit1->Text;


Подставил вместо 
Код

ActivateKeyboardLayout(LoadKeyboardLayout(IntToHex(MAKELANGID(LANG_RUSSIAN,SUBLANG_DEFAULT),8).c_str(),0),0);

Ваш вариант 
Код

LoadKeyboardLayout("00000419",KLF_ACTIVATE);


Не помогает.
Пошагово прошел, увидел что например на букву "v" MapVirtualKey показывает код 65. Я предполагал что переключив язык на код 65 вместо буквы "v" программа "м" писать будет, а она видимо просто код тулит несмотря на раскладку.

Тогда еще вопрос: как винда отличает буковки разных языков, может какой-то другой код буквы передавать надо?

Это сообщение отредактировал(а) Vladimir1 - 9.2.2008, 14:35
PM MAIL   Вверх
artsb
Дата 9.2.2008, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Если честно, я уже запутался, что куда вводится, куда перемещается, и почему печатается. Если не тяжело, проясните ситуацию.

Цитата(Vladimir1 @  9.2.2008,  14:33 Найти цитируемый пост)
Не помогает.

А я и не говорил, что поможет. smile Просто так короче.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
artsb
Дата 9.2.2008, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Пробовал, робовал, что-то не получается. :( Но обратил внимание, что всё зависти от последнего символа. Если английский, то все символы становятся английскими, если русский, то - русскими.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Vladimir1
Дата 9.2.2008, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.12.2007

Репутация: нет
Всего: нет



artsb, суть программы: прорисовывается форма, на ней компоненты: куча эдитов, пара кнокок и элемент CppWebBrowser. Я в эдиты ввожу определенные слова, с помощью кнопки "Обзор" (я сделал как в винде похожее) выбираю какой файл открыть (мне нужен *.html-файл). При нажатии на кнопку что все готово открывается выбранный мной файл (фокус в открывшемся файле установлен на первое поле для заполнения). Когда файл открылся я ввожу данные с первого эдита, имитирую TAB, ввожу данные 2-го эдита, имитирую TAB и т.д. в конце поле последнего поля имитирую нажатие ENTER. Т.е. получается программка для "автозаполнения формы". Хотел для работы облегчить себе жизнь автоматом что бы все вводилось.
Проблема: англоязычные слова все вводятся и обрабатываются как положено, а русскоязычные нет в том куске кода что я привел в первом посте.
PM MAIL   Вверх
Vladimir1
Дата 10.2.2008, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.12.2007

Репутация: нет
Всего: нет



artsb, 
Цитата

Пробовал, робовал, что-то не получается. :( Но обратил внимание, что всё зависти от последнего символа. Если английский, то все символы становятся английскими, если русский, то - русскими. 


Покажите пожалуйста этот кусок кода, возможно мне он подойдет.

PM MAIL   Вверх
artsb
Дата 10.2.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Почти как у вас:
Код

  char*  str=new char[Edit1->Text.Length()];
  strcpt(str,Edit1->Text.c_str);
        DWORD key;
  Edit2->SetFocus();
        for(int i=0; i <StrLen(str); i++)
        {
        int n=(int)str[i];
          if(n<0) LoadKeyboardLayout("00000419",KLF_ACTIVATE);
          else LoadKeyboardLayout("00000409",KLF_ACTIVATE);

           key=VkKeyScan(str[i]);
           keybd_event(key, 0, 0, 0);
           keybd_event(key, 0, KEYEVENTF_KEYUP, 0);
        }


Но вообще, если вы работаете с html, то поищите на форуме. Похожая проблема уже обсуждалась. Там, насколько я помню, вставляли нужный текс между тегами до отображения страницы.

Добавлено через 5 минут и 4 секунды
Нашёл! Кажись оно - вот.

Это сообщение отредактировал(а) artsb - 10.2.2008, 17:20


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.