C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Перехват нажатия клавиши, TEdit
Aptem
Отправлено: 08.01.2006, 15:04


Мастер участка

Группа: Участник
Сообщений: 349



Привет, всем.

У меня такая проблема. Ввожу с ручного сканера штрих-код в поле TEdit. Мне нужно, чтобы после ввода кода автоматически нажималась клавиша Enter. Как это сделать?

Спасибо за внимание.
dust
Отправлено: 08.01.2006, 20:54


Не зарегистрирован







А какова цель нажатия клавиши Enter ?
Gedeon
Отправлено: 09.01.2006, 02:31


Ветеран

Группа: Модератор
Сообщений: 1742



https://rxlib.ru/forums/index.php?ac...47c6a847ab89083
Aptem
Отправлено: 09.01.2006, 05:06


Мастер участка

Группа: Участник
Сообщений: 349



Цель такая.

До того как был подключен сканер, дело было так. Пользователь ручками вводил код в поле и затем нажимал клавишу Enter. На TEdit стоял обработчик OnKeyDown и там перехватывался ключ VK_RETURN. После перехвата, этот код искался в базе данных, но это уже другая история.

Теперь подключили сканер. Я хочу чтобы Enter нажимался сам после ввода кода, но как теперь определить КОГДА нажимать Enter? Я пробывал ставить обработчик OnChange, но он срабатывает если изменился хотя бы один символ в поле, а код состоит из множества цифр.

И еще: Сканер в конце кода может добавлять символ Enter, но он не воспринимается обработчиком OnKeyDown как нажатие клавиши, в этом вся и проблема.
Admin
Отправлено: 09.01.2006, 09:43


Владимир

Группа: Администратор
Сообщений: 1190



QUOTE
Сканер в конце кода может добавлять символ Enter


Сканеры штрих кода бывают разные.
Есть такие, что добавляют спецсимвол (возможно Enter)
перед отправкой штрих-кода, и также после него.

Можно эту возможность на сканере и выключить.

Какой сканер у Вас ? Через что подключен — в разрыв клавиатуры
или RS-232 ?
Если нужно различать (иногда бывает нужно), как осуществлен
ввод штрих-кода — с клавиатуры или со сканера — нужно перехватывать
этот спецсимвол.

Если сканер в конце кода добавляет символ Enter, вот и ловите его
на событие OnChange

CODE

//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
if(Edit1->Text.Length()){
   char ch = Edit1->Text[Edit1->Text.Length()];
   if(ch == '\013') ShowMessage("End — From Scaner");
   }
}
//---------------------------------------------------------------------------


Отредактировано Admin — 09/01/2006, 09:46
Aptem
Отправлено: 09.01.2006, 11:14


Мастер участка

Группа: Участник
Сообщений: 349



Сканер эмулирует нажатия клавиш клавиатуры, подключен через USB. Событие OnChange срабатывает на первом введенном символе, а потом не срабатывает. В конце кода добавляет Enter.

Ваш вариант Admin не подходит.

Отредактировано Aptem — 09/01/2006, 11:15
dust
Отправлено: 09.01.2006, 12:08


Не зарегистрирован







Если
QUOTE
Сканер эмулирует нажатия клавиш клавиатуры
то есть OnKeyPress, OnKeyDown.
Антон
  Отправлено: 09.01.2006, 13:39


Ученик-кочегар

Группа: Участник
Сообщений: 8



Может попробовать перевести из Edit'a в Memo
и поставить мах. длину строки кол-во цифр в штрих-коде
и при достижении мах. длины строки или к примеру 10 символов
сЪэмитировать нажатие Enter. wink.gif
Aptem
Отправлено: 10.01.2006, 05:38


Мастер участка

Группа: Участник
Сообщений: 349



QUOTE (Антон @ 09/01/2006, 13:39)
Может попробовать перевести из Edit'a в Memo
и поставить мах. длину строки кол-во цифр в штрих-коде
и при достижении мах. длины строки или к примеру 10 символов
сЪэмитировать нажатие Enter. wink.gif

Почти так и сделал wink.gif

Использовал вместо TEdit таблицу с одним столбцом и одной строкой TAdvStringGrid и обработал OnCellValidate. Все прекрасно работает!

Всем спасибо за помощь!

Вернуться в Вопросы программирования в C++Builder