Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 769

Раздел: Delphi » Прочее
/ вопрос открыт /

Ку народ, помогите плиз
Делаю программу иммитации набора русского текста с клавиатуры.(метод копирования и т.п не подходит, нужна именно имитация как будто кто - то печатает текст на клавиатуре )
пробую реализовать за счет команды keybd_event
Так вот не могу через неё иммитировать ввод некоторых русских букв, да и знаки препинания тоже выделуются)))
С русскими буквами которым на клавиатуре соответствуют англ буквы проблем нет, но вот если им соответствую какие либо знаки, ничего не рабоатет.
Может есть у кого идеи как задавать параметры keybd_event, что б корректно получать эти проблемные буквы или вобще другой способ реализации этой самой имитации
пробовал вариаены типа :
keybd_event(225 , 0, 0, 0); //225 код "Б" в ASCII
выкладу проэктитк (там много мусора не обращайте внимания) который делался на основе транслитератора, он корректно обрабатует печатает текст только если в нем нет проблемных букв )к примеру фраза "привет как дела"
но когда я пытаюсь вывести весь русский алфавит.......
и буду очень благодарет если подскажете идею как мне в этой программке реализовать и набор больших букв, уже 2-й день мучаюсь с этой программой...

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var c,b:char;
  3. begin
  4.  
  5.  
  6.  
  7.  
  8.  
  9. end;


F0RIS Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: F0RIS (статус: Посетитель)
Вопрос отправлен: 14 февраля 2010, 12:56
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Amidamaru

Здравствуйте, F0RIS!
Используйте событие OnKeyDown (или OnKeyUp) для определения кода нужной клавиши.

Приложение:
  1. procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  2. Shift: TShiftState);
  3. begin
  4. memo.Lines.add(inttostr(Key));
  5. 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

Amidamaru (статус: 4-ый класс), 14 февраля 2010, 14:02 [#1]:

А по поводу больших букв - имитируйте нажатие Shift (код VK_SHIFT). И не забудте также симитировать "отпускание" этой клавиши.
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
F0RIS

F0RIS (статус: Посетитель), 14 февраля 2010, 14:31 [#2]:

да эт понятно вот только как это в цикл всунуть, что-то вроде условия если буква заглавная то шифт нажимать...
Amidamaru

Amidamaru (статус: 4-ый класс), 14 февраля 2010, 15:23 [#3]:

Поищите в интернете исходники SendKeys, насколько я помню есть несколько реализаций этого алгоритма в делфи, в одной из которых используется keybd_event. Хоть алгоритм довольно сложный, но его вполне можно разобрать.
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
F0RIS

F0RIS (статус: Посетитель), 14 февраля 2010, 15:29 [#4]:

У мня уже есть исходники SendKeys... я всё думаю как отличать большую букву от маленькой О_о
Amidamaru

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 ...
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:55
Выполнено за 0.03 сек.