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. |
|
Aptem |
Отправлено: 10.01.2006, 05:38 |
|
Мастер участка
Группа: Участник
Сообщений: 349
|
QUOTE (Антон @ 09/01/2006, 13:39) | Может попробовать перевести из Edit'a в Memo
и поставить мах. длину строки кол-во цифр в штрих-коде
и при достижении мах. длины строки или к примеру 10 символов
сЪэмитировать нажатие Enter. |
Почти так и сделал
Использовал вместо TEdit таблицу с одним столбцом и одной строкой TAdvStringGrid и обработал OnCellValidate. Все прекрасно работает!
Всем спасибо за помощь!
|
|