Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Исчезает окно предупреждения. [D7, WinXP]


Страницы:   1 2 3

kyn66 ©   (2009-08-20 10:50:00) 

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

...
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;


kyn66   (2009-08-20 13:14:00) [41]


> Автор, прочтите, пожалуйста, раздел 5.2.3. Экранные состояния
> объектов:


Прочитал, спасибо. Однако здесь немного другая ситуация, нежеле прмведенная  в статье.Полупрозрачное окно появляется в момент ошибки, немного висит и также само исчезает. В момент проверки билетов сканером дело доходит до автоматизма и оператор делает огрехи, суя второй раз этот билет. Когда речь идет о 500 и более билетах, поверьте, нужно прервать этот процесс, обратить внимание оператора на ошибку и дать возможность нажать на кнопку, дабы выпустить из руки уже ранее проверенный билет. Психология, однако... ;)


Andy BitOff   (2009-08-20 13:13:00) [42]


> kyn66 ©   (20.08.09 12:54) [14]
> > эргономика тогда ни к черту
> Не понял.... Это к чему?

Это к тому, что оператору по барабану какой это билет, это тебе не по барабану.
За сим, достаточно будет или в StaticText3.Caption вывести красным, мол, ля-ля-ля, или же в Image1.Picture.Bitmap загрузить подготовленный заранее желтый восклицательный знак в красном кружочке.
Не надо заставлять юзера выполнять не нужные телодвижения. У тебя же не критичный вопрос с возможностью выбора, а просто информация.


Kolan   (2009-08-20 13:06:00) [43]

Может, kyn66, у пользователя и хватит рук, но есть еще и ментальные ограничения.


kyn66   (2009-08-20 13:03:00) [44]

НУ почему уже так мрачно. Сканер стоит в своей подставке. Билет подносится левой рукой, в правой мышка. При появлении сообщения тиснем мышом на кнопку информационного окна и все. Кстати, интересная идея с дрожанием(мерцанием) формы в мемент дубляжа. Я где-то такое уже видел. Приневерном действии (в данном случае при повторном сканировании) форма пару секунд(или одну) энергично дрожит в горизонтальной плоскости, типа говоря "Неа, не верное действие". Потом опять замирает.


Kolan   (2009-08-20 13:01:00) [45]

Автор, прочтите, пожалуйста, раздел 5.2.3. Экранные состояния объектов:

http://raskin-interface.narod.ru/interface/chapter5.htm


Медвежонок Пятачок   (2009-08-20 12:56:00) [46]

это будет программа для трехруких мутантов.
в одной руке билет, во второй сканер, третья - наготове нажать баттон если билет уже был


kyn66   (2009-08-20 12:54:00) [47]


> эргономика тогда ни к черту

Не понял.... Это к чему?


Медвежонок Пятачок   (2009-08-20 12:50:00) [48]

эргономика тогда ни к черту.


kyn66   (2009-08-20 12:48:00) [49]


> Мне тоже кажется, что всплывающего полупрозрачного не мешающего
> работн сообщения будет достаточно.


Оно не полупрозрачное, а невидимое впринципе. Оно появляется и тут-же закрывается само, практически незаметно для глаза. А окно это - информационное и должно выполнять свое назначение прямое.


Медвежонок Пятачок   (2009-08-20 12:48:00) [50]

мигай капшеном формы. либо посылай/фотографируй управляющие последовательности, которые отключают постфиксы. они по идее должны отключаться


kyn66   (2009-08-20 12:46:00) [51]


> А что плохого в повторном сканировании билета?


Плохого может и ничего нету, проста в процессе сканирования подбивается общая сумма "правильно оплаченных" билетов и сверяется с ведомостью.

Проверил, да действительно виноват сканер. Сейчас подключил старый, не возвращающий Enter. С ним все пучком, предупреждение появляется. С новым сканером проблема осталась даже после

begin
  EmptyKeyQueue;
  ErrorMsg('Повторное сканирование билета !');
   Edit1.SetFocus;
   Edit1.SelectAll;
   Exit;
end;


Короче выхода два. Или победить воздействие сканера на кнопку информационного окна, или подключать для сообщение стороннюю форму с информационным окном без дефолтовой кнопки его закрытия.


Kolan   (2009-08-20 12:44:00) [52]

Мне тоже кажется, что всплывающего полупрозрачного не мешающего работн сообщения будет достаточно.


Медвежонок Пятачок   (2009-08-20 12:40:00) [53]

плохое здесь на самом деле - это необходимость давить на кнопку мессджбокса держа в руках сканер


Kolan   (2009-08-20 12:35:00) [54]

А что плохого в повторном сканировании билета?


kyn66   (2009-08-20 12:05:00) [55]

Да, сканер Enter возвращает. Но иногда приходится работать и на таком, который не возвращает. У меня их два для тестирования проги. А каким способом лучше очистить буфер клавиатуры? Я в примере нашел(Delphi Word), но он выдает ошибку

procedure EmptyKeyQueue;
var
  Msg: TMsg;
begin
  while PeekMessage(Msg, 0, WM_KEYFIRST, WM_KEYLAST,
    PM_REMOVE or PM_NOYIELD) do;
end;


Медвежонок Пятачок   (2009-08-20 11:24:00) [56]

а из какого потока идет вызов бокса?


sniknik   (2009-08-20 11:17:00) [57]

> быстро мелькнет и не появляется.
> что что-то нажимает автоматом кнопку Ok
сканер. у него часто либо постфиксом либо сам он умеет энтер в конце штрих кода посылать, проверь, считай в мемо, будет переход на следующую строку после кода.
надо чистить "буфер клавиатуры" после чтения со сканера, если тебе это не нужно.


kyn66   (2009-08-20 10:56:00) [58]


> дело может быть в сетфокусе



Edit1.SetFocus;
Edit1.SelectAll;

Отключал, не помогло...


kyn66   (2009-08-20 10:55:00) [59]

Дополню, что в среде Delphi  в режиме отладки ,пошагово, окно появляется нормально. Складывается впечатление, что что-то нажимает автоматом кнопку Ok


Медвежонок Пятачок   (2009-08-20 10:54:00) [60]

дело может быть в сетфокусе


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо