Форум: "Начинающим";
Текущий архив: 2012.02.05;
Скачать: [xml.tar.bz2];
ВнизВвод в TЕdit руками или сканером штрихкода. Найти похожие ветки
← →
Laguna © (2011-10-24 13:12) [0]Возможно ли как то определить чем был произведен ввод в TEdit руками с клавиатуры или сканером штрихкода?
← →
Ega23 © (2011-10-24 13:16) [1]Сканнер штрихкода не "выводит" в TEdit
← →
Dennis I. Komarov © (2011-10-24 13:16) [2]если считать время ввода, то можно...
← →
Dennis I. Komarov © (2011-10-24 13:17) [3]
> считать
->е (Упс...)
← →
Inovet © (2011-10-24 13:33) [4]> [2] Dennis I. Komarov © (24.10.11 13:16)
> если считать время ввода, то можно...
А копипаст отлавливать?
← →
Ega23 © (2011-10-24 13:37) [5]ИМХО.
Если возникают такие вопросы, то в архитектуре проекта явный бардак.
Рекомендую посмотреть в сторону UML DFD (DataFlow Diagramm) и разрисовать всё как надо.
← →
Dennis I. Komarov © (2011-10-24 13:42) [6]
> Inovet © (24.10.11 13:33) [4]
нефиг вообще туда пастить :)
← →
RWolf © (2011-10-24 14:32) [7]
> Ega23 © (24.10.11 13:16) [1]
> Сканнер штрихкода не "выводит" в TEdit
сканер, подключаемый в клавиатурный разъём, будет выводить туда, куда юзер поставит текстовый курсор.
← →
Laguna © (2011-10-24 14:38) [8]
> сканер, подключаемый в клавиатурный разъём, будет выводить
> туда, куда юзер поставит текстовый курсор.
Совершенно верно. Просто в случае отсутствия сканера предлагается ввод вручную. Хочется отловить , чтобы не вводили сканером в поле, предназначенное для ручного ввода с последующей обработкой.
← →
Омлет © (2011-10-24 14:45) [9]> Laguna © (24.10.11 14:38) [8]
> Просто в случае отсутствия сканера предлагается ввод вручную. Хочется отловить , чтобы не вводили сканером в поле, предназначенное для ручного ввода с последующей обработкой.
Вам на архитектуру уже намекнули. Как вообще у вас сканер может не-в-то-поле ввести номер?
← →
Rouse_ © (2011-10-24 15:41) [10]Сканера под рукой нет, проверить неначем, но теоретически должен сработать след подход: при добавлении символа в EDIT проверяй, нажата ли соответствующая клавиша через GetKeyState()
← →
OW © (2011-10-24 15:46) [11]частота onChange
+ увеличение length(text)
← →
Laguna © (2011-10-24 15:55) [12]
> Вам на архитектуру уже намекнули. Как вообще у вас сканер
> может не-в-то-поле ввести номер?
Потому что я уже писал, что для ввода вручную чвое поле ввода, для сканера - свое. Каждое поле обрабатывается по своему. Точнее допустим для сканера Edit1, а для ручного ввода Edit2. Основная операция обработки происходит на onChange для Edit1
procedure TScanFrm.Edit1Change(Sender: TObject);
begin
if Length(Edit1.Text) = KolDigit then
begin
if Copy(Edit1.Text, 1, 3) <> IntToStr(LotRec.Nom) then
begin
DublBlink;
Edit1.SetFocus;
Edit1.SelectAll;
Exit;
end;
if not DM1.NotrelizTbl.FindKey([LRec.Kod, LRec.Nom, B_SNom]) then
DM1.NotrelizTbl.InsertRecord([Nil, LRec.Kod, LRec.Nom, B_SNom])
else
begin
// WarnMsg("Дублирование записи !");
DublBlink;
Edit1.SetFocus;
Edit1.SelectAll;
Exit;
end;
LoadTir;
Edit1.SetFocus;
Edit1.SelectAll;
end;
end;
procedure TScanFrm.Edit2Change(Sender: TObject);
begin
if Length(Edit2.Text) = KolDigit then
PostMessage(Handle, WM_NEXTDLGCTL, 0, 0);
end;
Дополнительно хочу чпросить, точнее указать на засаду. Если после входа в обработку после сканера вызвать MessageBox? то окно его не появляется, кнопка вроде как сама нажимается, поэтому делаю просто подстветку поля рамкой красной (procedure DublBlink)
> при добавлении символа в EDIT проверяй, нажата ли соответствующая
> клавиша через GetKeyState()
А как определить какую клавтшу отлавливать? Ведь сканируются разные наборы цифр.
← →
Медвежонок Пятачок © (2011-10-24 16:04) [13]частота onChange
+ увеличение length(text)
+ и. интеллект на юзерский "копи-пасте"
← →
OW © (2011-10-24 16:10) [14]
> + и. интеллект на юзерский "копи-пасте"
там чендж один раз только будет, а длина на много единиц увеличится.
Вообще, надо конечно архитектуру пересматривать, но как заплатка "по-быстрому ", думаю, пойдет.
← →
Laguna © (2011-10-24 16:13) [15]ДА уж... юзерский интеллект, иногда на него не приходится расчитывать. Поэтому предусматриваются разные варианты от вылета программы.
ps
по поводу самозакрывающегося окна , походу на ShowMEssage кнопка стоит в фокусе, поэтому и закрывается после сканера.
← →
Laguna © (2011-10-24 16:16) [16]
> там чендж один раз только будет,
Нет, Change происходит на каждом добавлении символа, поэтому и придумана вот такая хитринкаif Length(Edit1.Text) = KolDigit then...
а до этого крутится пока условия не совпадут. (это я имею ввиду после считки сканером. Хотя с клавы тоже самое будет)
← →
Rouse_ © (2011-10-24 16:52) [17]
> А как определить какую клавтшу отлавливать? Ведь сканируются
> разные наборы цифр.
как какую? которая в OnKeyPress приходит...
← →
DiamondShark © (2011-10-24 18:22) [18]Удалено модератором
← →
DiamondShark © (2011-10-24 18:28) [19]
> Laguna © (24.10.11 13:12)
> Возможно ли как то определить чем был произведен ввод в
> TEdit руками с клавиатуры или сканером штрихкода?
Если сканер клавиатурный, включён в разрыв в один порт с клавиатурой, то практически никак. Теоретически, можно ловить скорость ввода, или настроить сканер на передачу символов префикса/суффикса и ловить по ним.
Если сканер подключён в отдельный порт (USB, сканер определяется как HID), то, возможно, ОРД спасёт RAW Input (WinXP и выше):
http://msdn.microsoft.com/en-us/library/ms645536(v=VS.85).aspx
Можно определять с какого экземпляра HID пришёл ввод.
← →
DiamondShark © (2011-10-24 18:30) [20]
> Rouse_ © (24.10.11 16:52) [17]
> которая в OnKeyPress приходит.
Когда OnKeyPress приходит, никакая клавиша уже не нажата.
← →
Dimka Maslov © (2011-10-24 18:47) [21]
> Когда OnKeyPress приходит, никакая клавиша уже не нажата.
Сначала приходит KeyDown, потом KeyPress (он может повторяться если кнопка нажата и не отпускается), потом только KeyUp. Так что способ вполне себе проходной.
← →
QAZ (2011-10-24 19:30) [22]самое тупое во всем этом,так это наличие 2х едитов + разная обработка
а еще ктото гонит на интелект пользователей...
← →
Rouse_ © (2011-10-24 19:37) [23]
> DiamondShark © (24.10.11 18:30) [20]
> Когда OnKeyPress приходит, никакая клавиша уже не нажата.
Заучи как мантру: "я буду всегда делать RTFM прежде чем постить глупость"procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if GetKeyState(Integer(Key)) <> 0 then
Memo1.Lines.Add("KeyDown")
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;
← →
DiamondShark © (2011-10-24 20:38) [24]Удалено модератором
← →
Rouse_ © (2011-10-24 20:44) [25]
> DiamondShark © (24.10.11 20:38) [24]
Похоже хорошего языка ты не понимаешь, так и запишем...
← →
DiamondShark © (2011-10-24 20:51) [26]
> Rouse_ © (24.10.11 20:44) [25]
Как носом ткнули, так сообщения трёшь? Ой, красота какая.
← →
DiamondShark © (2011-10-24 20:57) [27]Повторяю для тех, кто в танке.
К моменту прихода OnKeyPress никакая клавиша уже может быть не нажата, хотя предложенный любителем мантр код радостно сообщит, что клавиша нажата.
Теперь посмотрим, как любитель мантр придерётся к языку и сотрёт и это сообщение.
← →
Rouse_ © (2011-10-24 20:57) [28]
> DiamondShark © (24.10.11 20:51) [26]
> Как носом ткнули, так сообщения трёшь? Ой, красота какая.
Ткни еще раз, только перед этим перечитай внимательно выделенное тобой и осмысли остатком мозга.
Еще раз допустишь подобные высказывания - получишь профилактику...
← →
Rouse_ © (2011-10-24 20:59) [29]
> DiamondShark © (24.10.11 20:57) [27]
> К моменту прихода OnKeyPress никакая клавиша уже может быть
> не нажата
А не кажется ли тебе что выражения "не нажата" и "может быть не нажата" - немного разные понятия, или это одно и то-же?
← →
Rouse_ © (2011-10-24 21:00) [30]И на последок, даже если клавиша не нажата, это как-то воспрепятствует прохождению стандартной цепочки (down/press/up) ?
← →
DiamondShark © (2011-10-24 21:29) [31]
> 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:44) [32]
> sleep(100500);
А че так мало?
А теперь выкинь всю бредятину из головы, поставь слип в своем коде на 1000 например, нажми кнопку и отпусти, дождись реакции кода. В момент прихода сообщения мы узнаем о том, была клавиша нажата или нет на момент прихода сообшщения?
Теперь выключи, как ты говоришь "попоболь" и ответь мне на вопрос: мой вариант даже с искусственно созданными тобой проблемами не отвечает на поставленный автором вопрос?
← →
Rouse_ © (2011-10-24 21:46) [33]зы: Толь - не надо закрывать, мы тут еще поспорим немного, если пойдут прямые оскорбления еще раз - сам закрою...
← →
Laguna © (2011-10-24 22:16) [34]> QAZ (24.10.11 19:30) [22]
> самое тупое во всем этом,так это наличие 2х едитов + разная
> обработкаа еще ктото гонит на интелект пользователей...
Ну и в чем конкретно тупость? Есть лучший вариант?
← →
Rouse_ © (2011-10-24 22:22) [35]
> Laguna © (24.10.11 22:16) [34]
> Ну и в чем конкретно тупость? Есть лучший вариант?
Желательно избегать неоднозначности. Мы в свое время делали след образом: отдельная кнопка, по нажатию которой выводился диалог с надписью что-то типа: "ожидаем ввода сканера", в котором блокировался ввод с клавиатуры за исключением Esc.
В диалоге и снимался сам ввод, таким образом и пользователю было понятно что делать и не нужно было городить разграничение с фокусом ввода...
← →
DiamondShark © (2011-10-24 22:39) [36]
> Rouse_ © (24.10.11 21:44) [32]
> А че так мало?
Шоб ты спросил.
Поставь туда свою оценку разницы скорости своего пальца и посылки двух кодов друг за другом по ЮСБ.
> А теперь выкинь всю бредятину из головы, поставь слип в
> своем коде на 1000 например, нажми кнопку и отпусти, дождись
> реакции кода.
Это ты у сканера попроси дождаться реакции твоего кода.
Если ты не понимаешь, что аппаратные события происходят абсолютно независимо от реакции твоего кода, что моменты выборки сообщений не имеют ничего общего с моментами наступления событий и что возвращает GetKeyState, то я тебе не доктор.
> В момент прихода сообщения мы узнаем о том, была клавиша
> нажата или нет на момент прихода сообшщения?
Не прошло и пол-суток, как ты соизволиил сделать попытку прочитать и перевести цитату из TFM.
К сожалению, низачот. Попробуй ещё раз.
> Теперь выключи, как ты говоришь "попоболь" и ответь мне
> на вопрос: мой вариант даже с искусственно созданными тобой
> проблемами не отвечает на поставленный автором вопрос?
Отвечаю: не отвечает.
← →
DiamondShark © (2011-10-24 22:43) [37]
> Rouse_ © (24.10.11 22:22) [35]
> Мы в свое время делали след образом: отдельная кнопка, по
> нажатию которой выводился диалог с надписью что-то типа:
> "ожидаем ввода сканера", в котором блокировался ввод с
> клавиатуры за исключением Esc.В диалоге и снимался сам ввод,
> таким образом и пользователю было понятно что делать и
> не нужно было городить разграничение с фокусом ввода...
Т.е. вы в своё время решили не задачу прикладной области, а какую-то свою собственную проблему.
← →
KilkennyCat © (2011-10-24 22:43) [38]сканер сканеру рознь.... у меня сказевый даже есть. А3. к нему можно приделать ручку и елозить им по штрихкоду.
← →
Rouse_ © (2011-10-24 22:44) [39]
> DiamondShark © (24.10.11 22:39) [36]
> Если ты не понимаешь, что аппаратные события происходят
> абсолютно независимо от реакции твоего кода, что моменты
> выборки сообщений не имеют ничего общего с моментами наступления
> событий и что возвращает GetKeyState, то я тебе не доктор.
Ага, я понял о чем ты, мдя... :)
Т.е. ты реально думаешь что событие сгенеренное сканером придет вне очереди сообщений и соответственно все АПИ, относящиеся к ней пойдут лесом?
← →
Anatoly Podgoretsky © (2011-10-24 22:44) [40]> Rouse_ (24.10.2011 21:46:33) [33]
Ну так просто, открой если считаешь нужным, но вы уже перешли на взаимные
оскорбления.
← →
DiamondShark © (2011-10-24 22:45) [41]> Rouse_ © (24.10.11 22:22) [35]
Кстати, тут написано враньё.
← →
Anatoly Podgoretsky © (2011-10-24 22:45) [42]> Laguna (24.10.2011 22:16:34) [34]
Есть, одно поле
← →
Rouse_ © (2011-10-24 22:47) [43]
> DiamondShark © (24.10.11 22:45) [41]
> Кстати, тут написано враньё.
Ты раскрывай тему, родимый - не стесняйся :)
← →
Rouse_ © (2011-10-24 22:49) [44]
> Anatoly Podgoretsky © (24.10.11 22:44) [40]
> Ну так просто, открой если считаешь нужным, но вы уже перешли
> на взаимные оскорбления.
Ну не я ж первый по родственникам прошелся, тяжелые времена пошли, совсем народ с выражениями не стесняется...
← →
Laguna © (2011-10-24 22:54) [45]В предложенном варианте что подразумевается под диалогом? Если дополнителная форма - то смысл тот же будет. Просто будет задействована дополнительная форма. Вот с блокированием ввода с клавиатуры есть над чем подумать.
Сейчас у меня вот так
http://s017.radikal.ru/i441/1110/39/c5c0ed02798b.jpg
http://s45.radikal.ru/i109/1110/74/c64733172f67.jpg
Как правило ручной ввод применяется когда нет в наличии сканера. В принципе можно не опасаться. Каждый Edit отработает нормально. Но кто его знает, если приспичит кому переключиться в ручной режим и подсунуть под сканер. Сегодня не хватило времени на работе полностью проверить все возможные варианты.
← →
Anatoly Podgoretsky © (2011-10-24 22:57) [46]> Rouse_ (24.10.2011 22:49:44) [44]
А зачем разбирать, мол он первый начал, не в песочнице, бить своих и чужих
← →
Rouse_ © (2011-10-24 22:59) [47]
> Laguna © (24.10.11 22:54) [45]
>
> В предложенном варианте что подразумевается под диалогом?
>
Первый
← →
Rouse_ © (2011-10-24 23:00) [48]Удалено модератором
Примечание: Ну вот даже так нельзя...
← →
DiamondShark © (2011-10-24 23:00) [49]
> Rouse_ © (24.10.11 22:44) [39]
Ты опять слушаешь свои фантазии, а не то, что я говорю.
Весь АПИ будет работать как часики. Не будет работать твой подход, потому что ты не понимаешь, как работает тот самый АПИ, который ты упоминаешь всуе.
> Rouse_ © (24.10.11 22:47) [43]
Дык, формальная логика, класс второй, третья четверть:
> диалог с надписью что-то типа: "ожидаем ввода сканера",
> в котором блокировался ввод с клавиатуры за исключением Esc.
Если вы смогли блокировать ввод с клавиатуры, но принимали ввод сканера, значит вам удалось разрешить проблему различения ввода с клавиатуры и со сканера.
Но диалог вы создавали для того чтобы НЕ РЕШАТЬ (или потому что не СМОГЛИ решить) проблему различения ввода с клавиатуры и со сканера.
Твоя байка содержит внутреннее противоречие. Рыбаки и то лучше сочиняют.
← →
Rouse_ © (2011-10-24 23:06) [50]
> DiamondShark © (24.10.11 23:00) [49]
>
>
> > Rouse_ © (24.10.11 22:44) [39]
>
> Ты опять слушаешь свои фантазии, а не то, что я говорю.
> Весь АПИ будет работать как часики. Не будет работать твой
> подход, потому что ты не понимаешь, как работает тот самый
> АПИ, который ты упоминаешь всуе.
Ну тыж не стесняйся - код приводи демонстрирующий невалидность работы данного кода со сканером, что ты как первокурсница ?
А там и поглядим у кого фантазии поболе будет.
> DiamondShark © (24.10.11 23:00) [49]
> Если вы смогли блокировать ввод с клавиатуры, но принимали
> ввод сканера, значит вам удалось разрешить проблему различения
> ввода с клавиатуры и со сканера.
> Но диалог вы создавали для того чтобы НЕ РЕШАТЬ (или потому
> что не СМОГЛИ решить) проблему различения ввода с клавиатуры
> и со сканера.
А эт батенька все из-за того, что кто-то леницо читать мануалы от МС по юзабилити, отсюда и рождаются всякого рода нестандартные подходы к построению интерфейса, и неликвидные задачи плана "надо решить как в одно окно будет литься куча данных я мы их должны расфасовывать по смыслу"
← →
Laguna © (2011-10-24 23:14) [51]
> и неликвидные задачи плана "надо решить как в одно окно
> будет литься куча данных я мы их должны расфасовывать по
> смыслу"
Если это камень в мой огород, то да, решается в одной форме, но разграничение принимаемых данных придумано на уровне разных мест ввода. Пока так... а там будет подумать как лучше сделать.
← →
Медвежонок Пятачок © (2011-10-24 23:16) [52]Весь гемор из-за того, что пошли по пути наименьшего сопротивления - сканер в режиме "разрыв клавы". Ибо программировать ничего как бы не надо.
← →
Юрий Зотов © (2011-10-24 23:17) [53]А зачем вообще все это? Разве не пофиг, откуда в Edit"е взялся штрих-код?
← →
Rouse_ © (2011-10-24 23:19) [54]
> Юрий Зотов © (24.10.11 23:17) [53]
>
> А зачем вообще все это? Разве не пофиг, откуда в Edit"е
> взялся штрих-код?
Ну, если лень перечитывать, то началось все с того что Дима Акуличев зачем-то высказал мнение, что на момент генерирования события о нажатии клавиши, сама клавиша может быть не нажата и поэтому узнать о ее состоянии на момент генерации сообщения не представляется возможным. Ну а дальше как обычно...
← →
Юрий Зотов © (2011-10-24 23:27) [55]
> Rouse_ © (24.10.11 23:19) [54]
Да я не о вас, я о сабже. На фиг надо вообще что-то там различать - не понимаю. Есть Edit (один!), в нем есть штрих-код - и разве не пофиг, откуда он там взялся?
← →
Игорь Шевченко © (2011-10-24 23:29) [56]
> на момент генерирования события о нажатии клавиши, сама
> клавиша может быть не нажата и поэтому узнать о ее состоянии
> на момент генерации сообщения не представляется возможным
Узнать о состоянии клавиши в момент выборки сообщения из очереди в общем случае невозможно. В этом ничего странного нет.
← →
Laguna © (2011-10-24 23:33) [57]
> Весь гемор из-за того, что пошли по пути наименьшего сопротивления
> - сканер в режиме "разрыв клавы". Ибо программировать ничего
> как бы не надо.
Так тут выбирать не приходится. Какой сканер есть в наличии с тем и работаем :)
Еще раз про два едита. "Edit для сканера" был придуман, чтобы ввод проходил как бы в фоновом режиме, т.к. ручного вмешательства не будет. И пользователю особо заморачиваться не приходится. Сканируй данные и все. Как говорится что есть, то и считали.
← →
Rouse_ © (2011-10-24 23:35) [58]
> Игорь Шевченко © (24.10.11 23:29) [56]
> Узнать о состоянии клавиши в момент выборки сообщения из
> очереди в общем случае невозможно. В этом ничего странного нет.
Дык на этом собственно затык и произошел...
← →
sniknik © (2011-10-24 23:36) [59]> А зачем вообще все это? Разве не пофиг, откуда в Edit"е взялся штрих-код?
не особо удобно когда нужно смотреть где ввод... вот у нас было, "ручной" в поля а сканером где ни попадя вводи и оно инициирует добавление товара в накладную.
т.е. не нужно из пролистывания/сумирования/т.д. что бы ни делали в накладной, где бы ввод не находился, просто провел сканером и товар добавлен и ожидание ввода количества стоит.
без разделения так не получится, у нас был префикс/постфикс при сканерах в разрыв, но это еще для DOS-а, в винде с таким подходом проблемы, и с COM портом в винде.
← →
Laguna © (2011-10-24 23:38) [60]Я ничего не имею против вашего предложение по поводу одного Edit-а. Просто говорю раньше был такой вариант, возможно нужно пересмотреть и действительно перевести все на один Edit.
← →
sniknik © (2011-10-24 23:39) [61]> Какой сканер есть в наличии с тем и работаем :)
цена вопроса 50-100$ поменять. (у нас было проще, мы их поставляли, и что кому давать решалось административно... после того как выяснили что программно это практически не решается)
← →
DiamondShark © (2011-10-24 23:59) [62]
> Rouse_ © (24.10.11 23:06) [50]
> Ну тыж не стесняйся - код приводи демонстрирующий невалидность
> работы данного кода со сканером, что ты как первокурсница
> ?А там и поглядим у кого фантазии поболе будет.
Тролишь?
В твоём обработчике GetKeyState всегда сообщит, что клавиша нажата, хотя в случае очень быстрого темпа аппаратных событий "клавиша" может быть давно отпущена.
Для того, чтобы имитировать ситуацию, когда соотношение темпа выборки сообщений и темпа аппаратных событий отличается от типичного отношения при обычном человеческом вводе, я тебе предложил вариант с задержкой.
Ты предпочёл постебаться, а не подумать. Ну, свобода выбора, фигли, святое. Только не обижайся потом, что тебя перестают всерьёз воспринимать, когда ты начинаешь дурочку валять.
> А эт батенька все из-за того, что кто-то леницо читать мануалы
> от МС по юзабилити, отсюда и рождаются всякого рода нестандартные
> подходы к построению интерфейса, и неликвидные задачи плана
> "надо решить как в одно окно будет литься куча данных я
> мы их должны расфасовывать по смыслу"
Я не понял, что из-за чего?
Ты сочиняешь нелогичные байки, из-за того, что кто-то чего-то не читает?
*facepalm.jpg*
Что же до мануалов...
Ты рабочее место кассира видел? Ну, в супермаркете-то хоть был?
Дай ссылку на мануал, в котором расписано юзабилити рабочего места кассира, к которому подключены клавиатура, два сканера (стационарный и ручной) и ридер каких-нибудь карточек, сблокированный с клавиатурой и гонящий данные по тому же интерфейсу.
Я тебе натуральное спасибо скажу. Я уже десятка полтора таких штук написал, на разных платформах, включая ДОС и такую экзотическую штуку, как залитую в компаунд коробочку 10х15х5 см, из которой кроме шести КОМ-портов и Эзернета ничего не торчало, зато внутри была ВинЦЕ. Вдруг я в этой жизни что-то упустил.
← →
DiamondShark © (2011-10-25 00:05) [63]
> Rouse_ © (24.10.11 23:19) [54]
Можно цитату, где Дима Акуличев что-то подобное говорит?
(если ты не различаешь "момент генерации события" и момент обработки Windows-сообщения, то можешь не утруждаться)
← →
Rouse_ © (2011-10-25 00:07) [64]
> DiamondShark © (24.10.11 23:59) [62]
Тяжко... ты действительно не представляешь схему, а вроде по моим представлениям должен был понимать...
Хм, попробую дать намек.
Ты сказал: "в случае очень быстрого темпа аппаратных событий "клавиша" может быть давно отпущена".
Вопрос, что произойдет в случае быстрого темпа?
1. часть сообщений окном будет пропущена и ввод со сканера будет не успешен.
2. все сообщения окно получит.
Если да, то:
1. обработает генерацией сообщения?
2. сможет получить по сообщению состояние клавиши через GetKeyState?
какой пункт по твоему мнению не верный?
← →
Laguna © (2011-10-25 00:11) [65]> sniknik © (24.10.11 23:39) [61]
> > Какой сканер есть в наличии с тем и работаем :)цена вопроса
> 50-100$ поменять.
Здесь не решается вопрос на уровне пользователей. Закупает сканеры головное предприятие. А подчененных более 4500. Т.ч. сами понимаете, что шиковать не приходится. Поэтому и пытаюсь решить задачу малой кровью при малом количестве часов, отпушенных на решение задачи.
Сейчас пересматривал возможность перехода к одному Edit. Оказывается не зря все же я делпал разделение ввода. При считке сканером к примеру билет читается как серия + номер+ индекс. Приручном вводе поля ввода разделяются(в другой задаче). Здесб же нужно вводить только номер + индекс. Короче тут tit и фейс самой проги завязан. Т.ч. звиняйте, может и по колхозному, но...
← →
Rouse_ © (2011-10-25 00:18) [66]
> DiamondShark © (24.10.11 23:59) [62]
> Ты рабочее место кассира видел? Ну, в супермаркете-то хоть был?
писал, тока для RS232, там окна не надомно...
Я вообще, ес чего, дохрена чего писал, и для лифтов и для датчиков давления и для котлов котельных ПО фигачил, а вот в супермаркете небыл, по инету предпочитаю чтоб продукты доставляли...
← →
DiamondShark © (2011-10-25 00:18) [67]
> Rouse_ © (25.10.11 00:07) [64]
Почитай внимательно описание GetKeyState.
И не подменяй предмет. Задача -- не просто получить ввод со сканера (который, конечно же, будет получен), а отличить ввод со сканера от "человеческого".
Твой подход -- по темпу ввода, человек нажимает на кнопочки (по сравнению со сканером) неспешно, и в момент выборки (которую ты постоянно путаешь с генерацией) WM_CHAR кнопочка ещё будет "нажата" (т.е. не произойдёт аппаратного события "присылка скан-кода отпускания").
Так вот я всего лишь говорю, что GetKeyState тут тебе не поможет совсем. Никак. Absolutly.
Почему -- читай внимательно описание GetKeyState. Следуй своему ценному совету.
← →
DiamondShark © (2011-10-25 00:21) [68]
> Rouse_ © (25.10.11 00:18) [66]
> писал, тока для RS232, там окна не надомно...
Тю... Не спортивно. На разных интерфейсах и дурак напишет.
Знаешь, как я радовался, когда появились УСБ-устройства, и АПИ RAW Input.
← →
Rouse_ © (2011-10-25 00:21) [69]
> DiamondShark © (25.10.11 00:18) [67]
> Твой подход -- по темпу ввода
плин, так я ж тебе уже раза три попросил - ну сделай ты мне демо код где эмулируется человеческий ввод и нечеловеческий, чегож ты ерунду пишешь то? покажи мне как мой код будет темп ввода то отличать :)
← →
имя (2011-10-25 00:25) [70]Удалено модератором
← →
DiamondShark © (2011-10-25 00:26) [71]
> Закупает сканеры головное предприятие.
Так какого типа сканеры? С каким интерфейсом? Keyboard или USB?
А клавиатуры с каким интерфейсом?
Если или клавы или сканеры USB, то юзай RAW Input.
← →
Laguna © (2011-10-25 00:44) [72]Сканеры в разрыв клавы. Клава обычная PS/2. Есть и другие сканеры, объемные, динозавры блин, но тоже в разрыв клавы включены. Раньше был еще такой сканер, который после скана не вставлял в конце #13. Вот тоже гемор был. И на разных местах разные сканеры стояли. Пришлось выкручиватся(уже точно не момн., эмулировал передерг с Edita, дабы onChange произошло). Т.к. на разных местах разное оборудование. Я тнигда захожу к людям и боьно становится смотреть на 15 монитор, на котором ну ни фига не видно. Мало того что тресется все, так еще под обильным слоем вуали. А людям приходится на этом работать. А вы говорить 50-100 баксов не вопрос...
← →
Laguna © (2011-10-25 00:51) [73]Уважаемые мастера. Еще одна просьба(за одно), дабы не плодить лишних тем, подскажите, какое событие срабатывает на гриде в момент его скроллинга. Т.е. когда реально нажимаеи на его значки скрола или передвигаем сам ползунок? http://s44.radikal.ru/i105/1110/9b/1be205e20182.jpg
← →
sniknik © (2011-10-25 01:09) [74]> который после скана не вставлял в конце #13
постфикс настраивается, сам сканер... единственный сканер с не настраиваемым постфиксом(или префиксом, не помню уже) был стационарный "магелан". забавно было дешевые китайские как угодно, а то такая "дорогая дура"... и вдруг "наполовину".
> дабы не плодить лишних тем
сейчас я тебя закрою, дабы не плодить лишних... один вопрос одна ветка, что в правилах в этом непонятного? что сэкономить пытаешься?
← →
Laguna © (2011-10-25 01:13) [75]> sniknik
> сейчас я тебя закрою, дабы не плодить лишних... один вопрос
> одна ветка, что в правилах в этом непонятного? что сэкономить
> пытаешься?
Ок, тогда лучше [73] вобще удалить, дабы не путалось здесь в этом топике
← →
Германн © (2011-10-25 01:32) [76]
> Ты рабочее место кассира видел? Ну, в супермаркете-то хоть
> был?
> Дай ссылку на мануал, в котором расписано юзабилити рабочего
> места кассира, к которому подключены клавиатура, два сканера
> (стационарный и ручной) и ридер каких-нибудь карточек, сблокированный
> с клавиатурой и гонящий данные по тому же интерфейсу.
Честно говоря, я вышеуказанное рабочее место "детально", т.е. со стороны самого кассира не видел. Но разве это оправдание делать "идиотский" алгоритм программы, которая должна сама определять откуда пришел ввод? И при этом сама делать вывод какой код учитывать? Считанный со сканера или введённый юзером с клавиатуры? А ведь они оба могут быть введены!
← →
KilkennyCat © (2011-10-25 02:09) [77]за пару долларов можно сделать небольшой переходничек на клаву, или на сканер, без разницы.... будет генерить дополнительно че-нить или генерить в усб 232 или куда угодно...
могу взяться через пару недель.
← →
KilkennyCat © (2011-10-25 02:13) [78]может, действительно сделать? судя по полемике, наболевшая проблема.
← →
KilkennyCat © (2011-10-25 02:15) [79]если в варианте "нажатие на кнопку клавиатуры шлет битик в усб" то себестоимость - доллар от 100 штук.
← →
Германн © (2011-10-25 02:17) [80]
> KilkennyCat © (25.10.11 02:09) [77]
>
> за пару долларов можно сделать небольшой переходничек на
> клаву, или на сканер, без разницы.... будет генерить дополнительно
> че-нить или генерить в усб 232 или куда угодно...
> могу взяться через пару недель.
Мне нужно возвращать долги после ремонта, а ты Костя тут демпингуешь! Чем я тебе не угодил? :)
← →
KilkennyCat © (2011-10-25 02:35) [81]а... ты уже что-то предлагаешь? извини, не заметил... снимаю свою кандитадуру.
извиняюсь за оффтоп, Германн, а ты ту проблему с езернетом решил? а то я почти решил.
← →
Германн © (2011-10-25 04:05) [82]
> извиняюсь за оффтоп, Германн, а ты ту проблему с езернетом
> решил? а то я почти решил.
>
И я "почти решил". Но наверняка моё почти никак не коррелирует с твоим почти. :)
Если что конкретное, то обращайся на почту.
← →
sniknik © (2011-10-25 08:01) [83]> Но разве это оправдание делать "идиотский" алгоритм программы, которая должна сама определять откуда пришел ввод?
почему это для удобства у тебя синоним "идиотский"?
поверь это очень удобно, при вводе накладной например не искать/вставать в специальное поле, или не не нажимать доп кнопку открывающую "форму ввода со сканера"(видел и такие "решения", и не с одной кнопкой), а просто сканировать сканером. собственно это их и отличает от клавиатуры, удобство ввода.
а вот "поле куда нужно встать" прежде чем "пикнуть", не очень отличается от ввода вручную, 13 цифр хороший оператор успевает набрать тогда быстрее чем с товара сканером со сканировать. удобство нивелируется.
> на клаву, или на сканер, без разницы....
только на клаву. т.к. после подключения сканера "в разрыв" для устройства также не будет разницы между данными устройств... и как поймешь "ху из ху"?
но вообще бессмысленно. т.к. вся проблема в неорганизованности, люди не знают как работает/чего хотят, покупают не то что нужно(или в моем случае было отгружают...), а после это хотят решить программно... т.е. попросту делают и переваливают проблему на программистов.
в общем никто твой переходник покупать не будет, но все также будут ожидать, что все должно работать "само". (да блин, посмотри выше там даже устройство не настраивают, на предмет посылки #13 в конце, а делают различные реализации ввода в программе... нонсенс)
← →
sniknik © (2011-10-25 08:06) [84]> если в варианте "нажатие на кнопку клавиатуры шлет битик в усб"
в связи с виндовой событийностью, и ее не реал таймом, битик в в усб может уже поменяться в тот момент когда идет чтение символа программой... неопределенность остается.
← →
Anatoly Podgoretsky © (2011-10-25 10:07) [85]> Laguna (25.10.2011 00:11:05) [65]
4500 и только в одном месте решили два эдита
← →
Laguna © (2011-10-25 11:00) [86]> Anatoly Podgoretsky © (25.10.11 10:07) [85]
> Laguna (25.10.2011 00:11:05) [65]4500 и только в одном месте решили два эдита
Не совсем понятна мысль
← →
Inovet © (2011-10-25 11:58) [87]> [77] KilkennyCat © (25.10.11 02:09)
> можно сделать небольшой переходничек на клаву, или на сканер,
> без разницы.... будет генерить дополнительно че-нить или
> генерить в усб 232 или куда угодно...
Тогда зачем его делать переходником - пусть включается в эти порты и шлёт всё туда, а клавиатура сама по себе.
← →
Anatoly Podgoretsky © (2011-10-25 13:45) [88]Ты решил проблему для 4500 пользователей, путем создания 2 эдитов :-)
← →
Laguna © (2011-10-25 13:55) [89]
> Ты решил проблему для 4500 пользователей, путем создания
> 2 эдитов :-)
Нет, путем создания программы, в которой используется функция сканирования посредством двух Edit.
← →
Anatoly Podgoretsky © (2011-10-25 14:11) [90]> Laguna (25.10.2011 13:55:29) [89]
Брехология
← →
Труп Васи Доброго © (2011-10-25 16:21) [91]Вот хоть убей - не пойму зачем ДВА едита? Что мешает использовать ОДИН? Чтобы проще было понять опиши ситуацию ошибки при вводе в один едит, тогда будет ясно (может быть) чего ты пытаешься избежать.
← →
Труп Васи Доброго © (2011-10-25 16:37) [92]
> Сейчас пересматривал возможность перехода к одному Edit.
> Оказывается не зря все же я делпал разделение ввода. При
> считке сканером к примеру билет читается как серия + номер+
> индекс. Приручном вводе поля ввода разделяются(в другой
> задаче). Здесб же нужно вводить только номер + индекс.
Опять нет никакой проблемы с одним едитом. Сканер введёт (количество от балды) 20 символов, а юзер только 10. И какая проблема? Если длина текста 20, то хватай и обрабатывай как "серия + номер+ индекс", если же их меньше, то юзер полюбасу энтер тыкнет, это тебе сигнал что "не сканер вводил", проверь количество и обрабатывай как "только номер + индекс". Вот и всё решение. Даже если юзер пробъёт все 20 цифр, то код сработает и энтер жать не придётся. А ты геморрой изобретаешь. Надо будет что гениально-простое, обращайся!
← →
Laguna © (2011-10-25 16:51) [93]
> Опять нет никакой проблемы с одним едитом. Сканер введёт
> (количество от балды) 20 символов, а юзер только 10. И какая
> проблема? Если длина текста 20, то хватай и обрабатывай
> как "серия + номер+ индекс", если же их меньше, то юзер
> полюбасу энтер тыкнет, это тебе сигнал что "не сканер вводил",
> проверь количество и обрабатывай как "только номер + индекс".
> Вот и всё решение. Даже если юзер пробъёт все 20 цифр,
> то код сработает и энтер жать не придётся. А ты геморрой
> изобретаешь. Надо будет что гениально-простое, обращайся!
>
А если введено не 7 положенных от руки , а 6? На "ручном" Edit стоит
if Length(NomEdit.Text) = KolDigit then
PostMessage(Handle, WM_NEXTDLGCTL, 0, 0);
Дабы исключить лишнее клацанье по ентер. Чтобы уменьшить телодвижения при вводе(а этого ой как боятся дамы бальзаковского возраста), перед сканированием билетов я сперва отдельно запрашиваю номер серии. Затем в "ручном" режиме вводится только номер + индекс.[45] Сканер же все вместе возьмет. Конечно можно сделать проверку на количество введенных символов(если меньше чем нужно) Короче, нужно пробывать.
← →
Игорь Шевченко © (2011-10-25 20:40) [94]
> перед сканированием билетов
трамвайных ?
← →
KilkennyCat © (2011-10-25 22:44) [95]
> Inovet © (25.10.11 11:58) [87]
>
> Тогда зачем его делать переходником - пусть включается в
> эти порты и шлёт всё туда, а клавиатура сама по себе.
мой вариант не потребует переделки уже существующего софта. он лишь дополнит девайс, все штатные функции сохранены.
← →
Труп Васи Доброго © (2011-10-26 00:16) [96]
> А если введено не 7 положенных от руки , а 6? На "ручном"
> Edit стоит
> if Length(NomEdit.Text) = KolDigit then
> PostMessage(Handle, WM_NEXTDLGCTL, 0, 0);
> Дабы исключить лишнее клацанье по ентер.
Вот сразу видно, что ты с людьми не много работал. Дамы с великим удовольствием давят Enter, к тому же нажав Enter юзер подтверждает, что он ввёл номер полностью. Дальше уже твоя работа обрабатывать данные и проверять их на валидность. Вопрос "А если введено не 7 положенных от руки , а 6?" может возникнуть (извини за прямоту) у человека который только начинает учиться писать программы. (И два Edita для одной информации лишнее тому подтверждение) Проверь что ввели и маякни юзеру что "не всё ввёл", тем же едитом и поморгай или меняй цвет заливки Edita, когда будет нужное количество символов, чтобы даже неопытный юзер понял, что всё ОК. Потом они сами привыкнут не тыкать Enter, пока Edit не покраснеет. А проверяя на автомате, без подтверждения юзера по нажатию Enter рискуешь нарваться на проглатывание случайного нажатия кнопки или залипания или "я постоянно эту кнопку ногтем задеваю, у меня маникюр", а твой код радостно схавает эти 7 цифр и потащит на обработку. Ты не даёшь юзеру возможность исправить ошибку ввода, а это "боком чревато". Надеюсь понял.
← →
Германн © (2011-10-26 00:58) [97]
> мой вариант не потребует переделки уже существующего софта.
> он лишь дополнит девайс, все штатные функции сохранены.
>
>
Он лишь предоставит программисту новые возможности, которые заставят программиста писать новое ПО. Ибо ему, этому программисту, только дай дополнительные возможности! Но если программист "заточен" на известную ему "юзабилити" и "шаг вправо, шаг влево - расстрел на месте" для него норма. Что тогда?
← →
brother © (2011-10-26 05:44) [98]Все имхо:
1. 2 едита для ручного и сканрного ввода - перебор, достаточно одного с нужными проверками
2. Забыли про очередь сообщений окну
3. Не вижу демо кода для проверки нажатия клавиш и приходов сообщений контролу
4. Сканерами не пользовался но, скорость ввода символов через сканер как то ограничена (скорость ввода, задержки между "клавишами")?
5. Зачем спорить если вопрос в начинающих и кода нет?
← →
Laguna © (2011-10-26 09:45) [99]> Труп Васи Доброго © (26.10.11 00:16) [96]
> Вот сразу видно, что ты с людьми
> не много работал. Дамы с великим удовольствием давят Enter,
> к тому же нажав Enter юзер подтверждает, что он ввёл номер
> полностью.
Не скажи. У нас такие дамы, что хотят чтобы программа выполняла действия только от ожного их взгляда на монитор.
> Дальше уже твоя работа обрабатывать данные и
> проверять их на валидность. Вопрос "А если введено не 7
> положенных от руки , а 6?" может возникнуть (извини за прямоту)
> у человека который только начинает учиться писать программы.
> (И два Edita для одной информации лишнее тому подтверждение)
> Проверь что ввели и маякни юзеру что "не всё ввёл", тем
> же едитом и поморгай или меняй цвет заливки Edita, когда
> будет нужное количество символов, чтобы даже неопытный юзер
> понял, что всё ОК. Потом они сами привыкнут не тыкать Enter,
> пока Edit не покраснеет.
В принципе я согласен.
А идея с контрольной подсветкой едита во время ввода мне понравилась.
> А проверяя на автомате, без подтверждения
> юзера по нажатию Enter рискуешь нарваться на проглатывание
> случайного нажатия кнопки или залипания или "я постоянно
> эту кнопку ногтем задеваю, у меня маникюр", а твой код радостно
> схавает эти 7 цифр и потащит на обработку. Ты не даёшь юзеру
> возможность исправить ошибку ввода, а это "боком чревато".
После едита стоит подтверждающая кнопка ввода, по нажатию на которую и выполняется проверка введенных данных с последующим сохранением. "Автомат" просто переводит на ее после того, как введено определенное количество знаков и только. Т.е. подредактировать введенную информацию возможность предоставляется.
http://s45.radikal.ru/i109/1110/74/c64733172f67.jpg
Т.е. автомат исключает повторный клац по Ентеру и всего то.
← →
Труп Васи Доброго © (2011-10-26 10:23) [100]Чем меньше надо тыкать кнопок мышью, тем лучше. Рука у юзера не отрывается от клавы. Я 7 лет отработал в ЖКХ конторе, так что кто такие дамы из бухгалтерии и абонентского отдела и как они могут работать я тоже в курсе. Сначала они по одной кнопке в минуту тычут, а потом приноровятся и так пальцами перебирают при разноске квитанций, что аж ветер вокруг, по 1500 квитанций в день лупили! Тот, кто бьёт много цифр будет счастлив, если ему вообще не придётся хвататься за мышь. Сначала может и будут ныть что непривычно, но потом будут тебе руки целовать за хорошую, удобную программу.
← →
Laguna © (2011-10-26 11:11) [101]
> Чем меньше надо тыкать кнопок мышью, тем лучше. Рука у юзера
> не отрывается от клавы.
>...
Тот, кто бьёт много цифр будет счастлив, если ему вообще не придётся >хвататься за мышь. Сначала может и будут ныть что непривычно, но потом
> будут тебе руки целовать за хорошую, удобную программу.
Так вот автомат у меня так и отробатывает. Переводит на кнопку, нажали ентер, данные обработались - фокус опять перешел на поле ввода, вводим следующие данные. и так по кругу. Потом закрываем режим ручного ввода одним кликом мыши. Как то так.
← →
Труп Васи Доброго © (2011-10-26 11:35) [102]
> Переводит на кнопку, нажали ентер, данные обработались -
> фокус опять перешел на поле ввода,
ЗАЧЕМ?!?!?!?
КТО МЕШАЕТ нажать Enter НЕ ВЫХОДЯ из Edita???? Ты создал лишнюю кнопку, лишний обработчик перевода фокуса и т.д. Это лишнее. Как ты там говоришь? "А если..." ввели 7 цифр, фокус ушёл на кнопку, а юзер понял, что цифра не та и её надо исправить, как юзер вернёт фокус? Ему надо рукой перевести мышь на Edit и тыкнуть, то есть лишние действия!!!
← →
Anatoly Podgoretsky © (2011-10-26 14:17) [103]> Труп Васи Доброго (26.10.2011 11:35:42) [102]
Что бы нажать кнопку Enter, фокус менять не требуется и даже писать
программу.
← →
Laguna © (2011-10-26 14:39) [104]
> Ему надо рукой перевести мышь на Edit и тыкнуть, то есть
> лишние действия!!!
Мдя... есть такое дело. Впринципе Все основная обработка проискодит в Edit1. Все, здаюсь, согласен, что второй Edit лишний. Обязуюсь переписать без него, как тока время появится. Всем спасибо. Тему можно закрывать.
← →
Труп Васи Доброго © (2011-10-26 14:39) [105]
> фокус менять не требуется и даже писать
> программу
Дак и я о том же!!! Там вообще эта кнопка не нужна! Об этом и пытаюсь камраду сказать. А он мало того, что кнопку, он ещё и второй Edit поставил, хотя можно только одним Editом обойтись.
Страницы: 1 2 3 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.02.05;
Скачать: [xml.tar.bz2];
Память: 0.79 MB
Время: 0.005 c