Форум: "Начинающим";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];
ВнизИсчезает окно предупреждения. Найти похожие ветки
← →
kyn66 © (2009-08-20 10:50) [0]Добрый день мастера. В своей программе по сканированию(сканер штрихкода) билетов лотерей пытаюсь выдать предупреждающее сообщение в случае повторного сканирования одного и того-же билета. Выполняю это за счет промежуточных таблиц, в которых сохраняю успешые данные о билете. Однако окно предупреждения быстро мелькнет и не появляется. В чем может быть дело?
...
procedure ErrorMsg(st : String);
begin
Application.MessageBox(PChar(st), "ОШИБКА !", MB_OK + MB_ICONHAND);
end;
...
else
if(DM1.TiragSLTbl.FindKey([StrToInt(SerLab), Nomlab + IndLab])) then
if not TirMemTbl.Locate("Tir;Bilet", VarArrayOf([StrToInt(SerLab), Nomlab + "." + IndLab]), []) then
begin
TirMemTbl.InsertRecord(["", StrToInt(SerLab), Nomlab + "." + IndLab, Dm1.TiragSLTblWinSum.Value]);
StaticText3.Caption := Razrad(DM1.TiragSLTblWinSum.AsString);
Image1.Picture.Bitmap := PicClip1.GraphicCell[0];
end
else
begin
ErrorMsg("Повторное сканирование билета !");
Edit1.SetFocus;
Edit1.SelectAll;
Exit;
end;
← →
Медвежонок Пятачок © (2009-08-20 10:54) [1]дело может быть в сетфокусе
← →
kyn66 © (2009-08-20 10:55) [2]Дополню, что в среде Delphi в режиме отладки ,пошагово, окно появляется нормально. Складывается впечатление, что что-то нажимает автоматом кнопку Ok
← →
kyn66 © (2009-08-20 10:56) [3]
> дело может быть в сетфокусе
Edit1.SetFocus;
Edit1.SelectAll;
Отключал, не помогло...
← →
sniknik © (2009-08-20 11:17) [4]> быстро мелькнет и не появляется.
> что что-то нажимает автоматом кнопку Ok
сканер. у него часто либо постфиксом либо сам он умеет энтер в конце штрих кода посылать, проверь, считай в мемо, будет переход на следующую строку после кода.
надо чистить "буфер клавиатуры" после чтения со сканера, если тебе это не нужно.
← →
Медвежонок Пятачок © (2009-08-20 11:24) [5]а из какого потока идет вызов бокса?
← →
kyn66 © (2009-08-20 12:05) [6]Да, сканер Enter возвращает. Но иногда приходится работать и на таком, который не возвращает. У меня их два для тестирования проги. А каким способом лучше очистить буфер клавиатуры? Я в примере нашел(Delphi Word), но он выдает ошибку
procedure EmptyKeyQueue;
var
Msg: TMsg;
begin
while PeekMessage(Msg, 0, WM_KEYFIRST, WM_KEYLAST,
PM_REMOVE or PM_NOYIELD) do;
end;
← →
Kolan © (2009-08-20 12:35) [7]А что плохого в повторном сканировании билета?
← →
Медвежонок Пятачок © (2009-08-20 12:40) [8]плохое здесь на самом деле - это необходимость давить на кнопку мессджбокса держа в руках сканер
← →
Kolan © (2009-08-20 12:44) [9]Мне тоже кажется, что всплывающего полупрозрачного не мешающего работн сообщения будет достаточно.
← →
kyn66 © (2009-08-20 12:46) [10]
> А что плохого в повторном сканировании билета?
Плохого может и ничего нету, проста в процессе сканирования подбивается общая сумма "правильно оплаченных" билетов и сверяется с ведомостью.
Проверил, да действительно виноват сканер. Сейчас подключил старый, не возвращающий Enter. С ним все пучком, предупреждение появляется. С новым сканером проблема осталась даже после
begin
EmptyKeyQueue;
ErrorMsg("Повторное сканирование билета !");
Edit1.SetFocus;
Edit1.SelectAll;
Exit;
end;
Короче выхода два. Или победить воздействие сканера на кнопку информационного окна, или подключать для сообщение стороннюю форму с информационным окном без дефолтовой кнопки его закрытия.
← →
Медвежонок Пятачок © (2009-08-20 12:48) [11]мигай капшеном формы. либо посылай/фотографируй управляющие последовательности, которые отключают постфиксы. они по идее должны отключаться
← →
kyn66 © (2009-08-20 12:48) [12]
> Мне тоже кажется, что всплывающего полупрозрачного не мешающего
> работн сообщения будет достаточно.
Оно не полупрозрачное, а невидимое впринципе. Оно появляется и тут-же закрывается само, практически незаметно для глаза. А окно это - информационное и должно выполнять свое назначение прямое.
← →
Медвежонок Пятачок © (2009-08-20 12:50) [13]эргономика тогда ни к черту.
← →
kyn66 © (2009-08-20 12:54) [14]
> эргономика тогда ни к черту
Не понял.... Это к чему?
← →
Медвежонок Пятачок © (2009-08-20 12:56) [15]это будет программа для трехруких мутантов.
в одной руке билет, во второй сканер, третья - наготове нажать баттон если билет уже был
← →
Kolan © (2009-08-20 13:01) [16]Автор, прочтите, пожалуйста, раздел
5.2.3. Экранные состояния объектов
:
http://raskin-interface.narod.ru/interface/chapter5.htm
← →
kyn66 © (2009-08-20 13:03) [17]НУ почему уже так мрачно. Сканер стоит в своей подставке. Билет подносится левой рукой, в правой мышка. При появлении сообщения тиснем мышом на кнопку информационного окна и все. Кстати, интересная идея с дрожанием(мерцанием) формы в мемент дубляжа. Я где-то такое уже видел. Приневерном действии (в данном случае при повторном сканировании) форма пару секунд(или одну) энергично дрожит в горизонтальной плоскости, типа говоря "Неа, не верное действие". Потом опять замирает.
← →
Kolan © (2009-08-20 13:06) [18]Может, kyn66, у пользователя и хватит рук, но есть еще и ментальные ограничения.
← →
Andy BitOff © (2009-08-20 13:13) [19]
> kyn66 © (20.08.09 12:54) [14]
> > эргономика тогда ни к черту
> Не понял.... Это к чему?
Это к тому, что оператору по барабану какой это билет, это тебе не по барабану.
За сим, достаточно будет или в StaticText3.Caption вывести красным, мол, ля-ля-ля, или же в Image1.Picture.Bitmap загрузить подготовленный заранее желтый восклицательный знак в красном кружочке.
Не надо заставлять юзера выполнять не нужные телодвижения. У тебя же не критичный вопрос с возможностью выбора, а просто информация.
← →
kyn66 © (2009-08-20 13:14) [20]
> Автор, прочтите, пожалуйста, раздел 5.2.3. Экранные состояния
> объектов:
Прочитал, спасибо. Однако здесь немного другая ситуация, нежеле прмведенная в статье.Полупрозрачное окно появляется в момент ошибки, немного висит и также само исчезает. В момент проверки билетов сканером дело доходит до автоматизма и оператор делает огрехи, суя второй раз этот билет. Когда речь идет о 500 и более билетах, поверьте, нужно прервать этот процесс, обратить внимание оператора на ошибку и дать возможность нажать на кнопку, дабы выпустить из руки уже ранее проверенный билет. Психология, однако... ;)
← →
Медвежонок Пятачок © (2009-08-20 13:15) [21]дабы выпустить из руки уже ранее проверенный билет. Психология, однако... ;)
Он его и так выпустит причем в обеих случаях. Тем более что их у него пачка
← →
Медвежонок Пятачок © (2009-08-20 13:16) [22]это примерно как в обоих ветках ифа вываливать сообщение "алгоритм пойдет на север" и "алгоритм пойдет на юг"
← →
kyn66 © (2009-08-20 13:17) [23]
> Не надо заставлять юзера выполнять не нужные телодвижения.
> У тебя же не критичный вопрос с возможностью выбора, а
> просто информация.
Согласен, есть в этом здравый смысл.
← →
Andy BitOff © (2009-08-20 13:18) [24]
> kyn66 © (20.08.09 13:14) [20]
> Когда речь идет о 500 и более билетах
А какое процентное соотношение повторов?
← →
Kolan © (2009-08-20 13:19) [25]Мне сценарий представляется таким:
о Оператор сует билет второй раз.
о Возникает полупрозрачное окно, где крупно написано Повторное сканирование билета! (заметьте, восклицательный знак не отрывается от слова). Полезно было бы пикнуть при этом динамиком.
о Пока оператор берет другой билет окно исчезает.
← →
Медвежонок Пятачок © (2009-08-20 13:19) [26]А какое процентное соотношение повторов?
это сильно зависит от открытости окна и силы ветра на улице.
← →
Andy BitOff © (2009-08-20 13:21) [27]
> kyn66 © (20.08.09 13:17) [23]
> Согласен, есть в этом здравый смысл.
Еще бы ты не был согласен =))))
На этом построена целая наука, о которой, тебе, кстати тут упомянули. И не один бошковитый дядька свою голову ломал и нам в удобной форме ведал, что же он там наломал.
← →
kyn66 © (2009-08-20 13:38) [28]Сделаю я наверное обычный всплывающий PopUp справа снизу в стиле аля-ХР и этого будет достаточно. Я думаю внимание будет привлечено.
← →
Kolan © (2009-08-20 13:53) [29]Мне кажется звук очень важен.
Дело в том, что когда человек выполняет монотонную работу он быстро научается выполнять её автоматически.
С другой стороны обычные люди могут осознанно выполнять лишь одно действие. То есть если человек делает сразу много всего одновременно, то почти всегда одно действие осознанно, а все остальные выполняются в фоне автоматом.
Например можно идти, жевать жвачку и болтать по телефону при этом ходьба и жевание будут автоматическими.
Если ваш оператор научится «чикать» билеты на автопилоте, то его мозг найдет чем заняться (отвлечься). В таких условиях вполне вероятен случай когда человек будет сканировать один и тот же билет не замечая вашего сообщения (даже если будет смотреть на экран), так как его мысли (локус внимания) будут где-то далеко.
Поэтому очень важно, чтобы в случае ошибки случилось что-то необычное. Звук справится с этой задачей. Он немедленно заставит человека переключить локус на то место где появляется звук. И кроме того звук слышно всегда, а сообщение видно только если смотришь на экран.
То есть звук поможет отвлечь человека и уведомить его о том, что что-то не так, а сообщение расскажет что именно случилось. Поэтому лучше использовать эти два уведомления вместе.
← →
Andy BitOff © (2009-08-20 14:04) [30]
> Kolan © (20.08.09 13:53) [29]
Несомненно поддерживаю.
← →
Дмитрий Белькевич (2009-08-20 14:43) [31]
> Полезно было бы пикнуть при этом динамиком.
+1.
> http://raskin-interface.narod.ru/interface/chapter5.htm
Книга - уг.
← →
kyn66 © (2009-08-20 14:50) [32]2Kolan
Согласен на все 100%
← →
kyn66 © (2009-08-20 14:53) [33]Только со звуком опять же могут возникнуть проблемы. Если просто через Beep, то зависит подключен динамик к компу или нет, громкий он или тихий и т.д. Задействовать звуковую карту - тоже проблема еще та. У кого она есть, у кого нету, у кого есть , но звук выключен и т.д.
← →
Kolan © (2009-08-20 15:05) [34]Разве трудно проиграть вавку каким-нибудь TMediaPlayer?
Хотя думаю, что бип лучше. Динамики есть на многих машинах.
← →
Amoeba © (2009-08-20 15:20) [35]
> Хотя думаю, что бип лучше. Динамики есть на многих машинах.
И выдать его не однократно, а дважды или даже трижды.
← →
sniknik © (2009-08-20 15:33) [36]> проблема осталась даже после
> begin
> EmptyKeyQueue;
> ErrorMsg("Повторное сканирование билета !");
> Edit1.SetFocus;
> Edit1.SelectAll;
> Exit;
> end;
проверь уж все
begin
Application.ProcessMessages;
EmptyKeyQueue;
Sleep(0);
ErrorMsg("Повторное сканирование билета !");
...
можно в разных комбинациях.
и кстати, а если невнимательный товарищ "просканит" штрихкод уже при "поднятом" окне сообщений? цифры проигнорируются, а ентер то опять сработает...
тебе надо программы логику менять, использовать не общий компонент сканера который шлет активному окну, а такой которому можно задавать целевое окно/форму ввода. вплоть до того что самому написать (это не так сложно). тогда и чистить ничего не придется.
← →
sniknik © (2009-08-20 15:38) [37]> оператор делает огрехи, суя второй раз этот билет.
код уникален? тогда простая табличка/рекордсет и проверка на существующий уже в ней код... и не нужно никаких предупреждений, просто в лог или где то сбоку показывать что код уже был и проигнорирован.
пусть хоть обсуются одним и тем же билетом...
← →
Kolan © (2009-08-20 15:39) [38]Amoeba, со звуками в этом плане почти так же как с цветами. Есть целая теория. Причем сам по себе звук, как и цвет ничего не значит, а вот металлический лязг в машине на скорости 150 км/ч вполне вероятно насторожит водителя :)
← →
Andy BitOff © (2009-08-20 15:42) [39]
> sniknik © (20.08.09 15:38) [37]
Дык про это ему и втолковывают ;)
← →
Kolan © (2009-08-20 15:50) [40]В техническом плане мне вообще кажется, что обработка получения кода окнами неверная. Код должен получать контроллер и проверять его на предмет дубля.
Даже если работа со сканером такова, что символы приходят окну, то окно не должно их использовать, тем более помешать в поле ввода или куда-то еще, оно должно отдать их контроллеру и все.
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.066 c