| 
| 
 | Вопрос # 3 769/ вопрос открыт / | 
 |  Ку народ, помогите  плизДелаю программу иммитации набора русского текста с клавиатуры.(метод копирования и т.п не подходит, нужна именно имитация как будто кто - то печатает текст на клавиатуре )
 пробую реализовать за счет команды keybd_event
 Так вот не могу через неё иммитировать ввод некоторых русских букв, да и знаки препинания тоже выделуются)))
 С русскими буквами которым на клавиатуре соответствуют англ буквы проблем нет, но вот если им соответствую какие либо знаки, ничего не рабоатет.
 Может есть у кого идеи как задавать параметры keybd_event, что б корректно получать эти проблемные буквы или вобще другой способ реализации этой самой имитации
 пробовал вариаены типа :
 keybd_event(225 , 0, 0, 0); //225 код "Б" в ASCII
 выкладу проэктитк (там много мусора не обращайте внимания) который делался на основе транслитератора, он корректно обрабатует  печатает текст  только если в нем нет проблемных букв )к примеру фраза "привет как дела"
 но когда я пытаюсь вывести весь русский алфавит.......
 и буду очень благодарет если подскажете идею как мне в этой программке реализовать и набор больших букв, уже 2-й день мучаюсь с этой программой...
 К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса) 
|  |   Вопрос задал: F0RIS (статус: Посетитель)Вопрос отправлен: 14 февраля 2010, 12:56
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Amidamaru Здравствуйте, F0RIS!Используйте событие OnKeyDown (или OnKeyUp) для определения кода нужной клавиши.
 Приложение:Переключить в обычный режим procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);beginmemo.Lines.add(inttostr(Key));end;
|  | Ответ отправил: Amidamaru (статус: 4-ый класс)Время отправки: 14 февраля 2010, 13:49
 Оценка за ответ: 5
 Комментарий к оценке: хм,работает, благодарю...а я определял методом procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
 begin
 ShowMessage(IntToStr(Ord(Key)));
 end;
 |  
 Мини-форум вопросаВсего сообщений: 5; последнее сообщение — 14 февраля 2010, 15:42; участников в обсуждении: 2. 
|   | Amidamaru (статус: 4-ый класс), 14 февраля 2010, 14:02 [#1]:А по поводу больших букв - имитируйте нажатие Shift (код VK_SHIFT). И не забудте также симитировать "отпускание" этой клавиши. |  
|   | F0RIS (статус: Посетитель), 14 февраля 2010, 14:31 [#2]:да эт понятно вот только как это в цикл всунуть, что-то вроде условия если буква заглавная то шифт нажимать... |  
|   | Amidamaru (статус: 4-ый класс), 14 февраля 2010, 15:23 [#3]:Поищите в интернете исходники SendKeys, насколько я помню есть несколько реализаций этого алгоритма в делфи, в одной из которых используется keybd_event. Хоть алгоритм довольно сложный, но его вполне можно разобрать. |  
|   | F0RIS (статус: Посетитель), 14 февраля 2010, 15:29 [#4]:У мня уже есть исходники  SendKeys... я всё думаю как отличать большую букву от маленькой О_о |  
|   | Amidamaru (статус: 4-ый класс), 14 февраля 2010, 15:42 [#5]: const ShiftLit: set of char = ['A'..'Z','А'..'Я','Ё'{, и др символы, которые требуют Shift}];
...
var s:string;
    i:integer;
...
if s[i] in ShiftLit then ... |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |