![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ввод в TЕdit руками или сканером штрихкода. [D7, XP]
Laguna © (2011-10-24 13:12:00)Возможно ли как то определить чем был произведен ввод в TEdit руками с клавиатуры или сканером штрихкода?
Laguna (2011-10-24 22:54:00) [61]В предложенном варианте что подразумевается под диалогом? Если дополнителная форма - то смысл тот же будет. Просто будет задействована дополнительная форма. Вот с блокированием ввода с клавиатуры есть над чем подумать.
Сейчас у меня вот так
http://s017.radikal.ru/i441/1110/39/c5c0ed02798b.jpg
http://s45.radikal.ru/i109/1110/74/c64733172f67.jpg
Как правило ручной ввод применяется когда нет в наличии сканера. В принципе можно не опасаться. Каждый Edit отработает нормально. Но кто его знает, если приспичит кому переключиться в ручной режим и подсунуть под сканер. Сегодня не хватило времени на работе полностью проверить все возможные варианты.
Rouse_ (2011-10-24 22:49:00) [62]
> Anatoly Podgoretsky © (24.10.11 22:44) [40]
> Ну так просто, открой если считаешь нужным, но вы уже перешли
> на взаимные оскорбления.
Ну не я ж первый по родственникам прошелся, тяжелые времена пошли, совсем народ с выражениями не стесняется...
Rouse_ (2011-10-24 22:47:00) [63]
> DiamondShark © (24.10.11 22:45) [41]
> Кстати, тут написано враньё.
Ты раскрывай тему, родимый - не стесняйся :)
DiamondShark (2011-10-24 22:45:00) [64]> Rouse_ © (24.10.11 22:22) [35]
Кстати, тут написано враньё.
Anatoly Podgoretsky (2011-10-24 22:45:00) [65]> Laguna (24.10.2011 22:16:34) [34]
Есть, одно поле
Rouse_ (2011-10-24 22:44:00) [66]
> DiamondShark © (24.10.11 22:39) [36]
> Если ты не понимаешь, что аппаратные события происходят
> абсолютно независимо от реакции твоего кода, что моменты
> выборки сообщений не имеют ничего общего с моментами наступления
> событий и что возвращает GetKeyState, то я тебе не доктор.
Ага, я понял о чем ты, мдя... :)
Т.е. ты реально думаешь что событие сгенеренное сканером придет вне очереди сообщений и соответственно все АПИ, относящиеся к ней пойдут лесом?
Anatoly Podgoretsky (2011-10-24 22:44:00) [67]> Rouse_ (24.10.2011 21:46:33) [33]
Ну так просто, открой если считаешь нужным, но вы уже перешли на взаимные
оскорбления.
DiamondShark (2011-10-24 22:43:00) [68]
> Rouse_ © (24.10.11 22:22) [35]
> Мы в свое время делали след образом: отдельная кнопка, по
> нажатию которой выводился диалог с надписью что-то типа:
> "ожидаем ввода сканера", в котором блокировался ввод с
> клавиатуры за исключением Esc.В диалоге и снимался сам ввод,
> таким образом и пользователю было понятно что делать и
> не нужно было городить разграничение с фокусом ввода...
Т.е. вы в своё время решили не задачу прикладной области, а какую-то свою собственную проблему.
KilkennyCat (2011-10-24 22:43:00) [69]сканер сканеру рознь.... у меня сказевый даже есть. А3. к нему можно приделать ручку и елозить им по штрихкоду.
DiamondShark (2011-10-24 22:39:00) [70]
> Rouse_ © (24.10.11 21:44) [32]
> А че так мало?
Шоб ты спросил.
Поставь туда свою оценку разницы скорости своего пальца и посылки двух кодов друг за другом по ЮСБ.
> А теперь выкинь всю бредятину из головы, поставь слип в
> своем коде на 1000 например, нажми кнопку и отпусти, дождись
> реакции кода.
Это ты у сканера попроси дождаться реакции твоего кода.
Если ты не понимаешь, что аппаратные события происходят абсолютно независимо от реакции твоего кода, что моменты выборки сообщений не имеют ничего общего с моментами наступления событий и что возвращает GetKeyState, то я тебе не доктор.
> В момент прихода сообщения мы узнаем о том, была клавиша
> нажата или нет на момент прихода сообшщения?
Не прошло и пол-суток, как ты соизволиил сделать попытку прочитать и перевести цитату из TFM.
К сожалению, низачот. Попробуй ещё раз.
> Теперь выключи, как ты говоришь "попоболь" и ответь мне
> на вопрос: мой вариант даже с искусственно созданными тобой
> проблемами не отвечает на поставленный автором вопрос?
Отвечаю: не отвечает.
Rouse_ (2011-10-24 22:22:00) [71]
> Laguna © (24.10.11 22:16) [34]
> Ну и в чем конкретно тупость? Есть лучший вариант?
Желательно избегать неоднозначности. Мы в свое время делали след образом: отдельная кнопка, по нажатию которой выводился диалог с надписью что-то типа: "ожидаем ввода сканера", в котором блокировался ввод с клавиатуры за исключением Esc.
В диалоге и снимался сам ввод, таким образом и пользователю было понятно что делать и не нужно было городить разграничение с фокусом ввода...
Laguna (2011-10-24 22:16:00) [72]> QAZ (24.10.11 19:30) [22]
> самое тупое во всем этом,так это наличие 2х едитов + разная
> обработкаа еще ктото гонит на интелект пользователей...
Ну и в чем конкретно тупость? Есть лучший вариант?
Rouse_ (2011-10-24 21:46:00) [73]зы: Толь - не надо закрывать, мы тут еще поспорим немного, если пойдут прямые оскорбления еще раз - сам закрою...
Rouse_ (2011-10-24 21:44:00) [74]
> sleep(100500);
А че так мало?
А теперь выкинь всю бредятину из головы, поставь слип в своем коде на 1000 например, нажми кнопку и отпусти, дождись реакции кода. В момент прихода сообщения мы узнаем о том, была клавиша нажата или нет на момент прихода сообшщения?
Теперь выключи, как ты говоришь "попоболь" и ответь мне на вопрос: мой вариант даже с искусственно созданными тобой проблемами не отвечает на поставленный автором вопрос?
DiamondShark (2011-10-24 21:29:00) [75]
> Rouse_ © (24.10.11 20:57) [28]
Давай ты начнёшь сам следовать своим советам (на счёт остатков мозга, например, или там языка). Ну, или вспомнишь, о чём идёт речь в теме. Ещё бы хорошо не приплетать то, о чём вообще речь не шла (о последовательности сообщений, например).
Если до тебя не доходит написанное (а как оно может дойти, когда попоболь и кнопка под рукой), то модифицируй свой код вот так:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if GetKeyState(Integer(Key)) <> 0 then
Memo1.Lines.Add('KeyDown');
sleep(100500);
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if GetKeyState(Integer(UpperCase(Key)[1])) <> 0 then
Memo1.Lines.Add('KeyStillDown');
end;
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
Memo1.Lines.Add('KeyUp');
end;
Нажми клавишу коротко и осмысли происходящее.
Ну вот именно это и было написано в стёртом тобой тексте.
Теперь давай вспомним, что речь у нас идёт не о клавиатурах, а о сканерах, точнее, о различении сканеров и клавиатур.
Пропускной способности интерфейсов (USB 2.0, например) вполне хватает, чтобы послать пару "нажато"-"отпущено" с такой скоростью, что приложение даже пол-цикла message pump-а выполнить не успеет.
Так что к моменту выборки WM_CHAR из очереди потока "клавиши" (т.е. внутреннее состояние HID-драйвера) будут "отпущены".
Но твой мантровский код радостно сообщит, что клавиша нажата.
Rouse_ (2011-10-24 21:00:00) [76]И на последок, даже если клавиша не нажата, это как-то воспрепятствует прохождению стандартной цепочки (down/press/up) ?
Rouse_ (2011-10-24 20:59:00) [77]
> DiamondShark © (24.10.11 20:57) [27]
> К моменту прихода OnKeyPress никакая клавиша уже может быть
> не нажата
А не кажется ли тебе что выражения "не нажата" и "может быть не нажата" - немного разные понятия, или это одно и то-же?
DiamondShark (2011-10-24 20:57:00) [78]Повторяю для тех, кто в танке.
К моменту прихода OnKeyPress никакая клавиша уже может быть не нажата, хотя предложенный любителем мантр код радостно сообщит, что клавиша нажата.
Теперь посмотрим, как любитель мантр придерётся к языку и сотрёт и это сообщение.
Rouse_ (2011-10-24 20:57:00) [79]
> DiamondShark © (24.10.11 20:51) [26]
> Как носом ткнули, так сообщения трёшь? Ой, красота какая.
Ткни еще раз, только перед этим перечитай внимательно выделенное тобой и осмысли остатком мозга.
Еще раз допустишь подобные высказывания - получишь профилактику...
DiamondShark (2011-10-24 20:51:00) [80]
> Rouse_ © (24.10.11 20:44) [25]
Как носом ткнули, так сообщения трёшь? Ой, красота какая.