Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2016.05.01;
Скачать: CL | DM;

Вниз

GridKeyUp и InputBox - застреваю при нажатии Ентера   Найти похожие ветки 

 
Дмитрий   (2014-09-26 15:20) [0]

В обработчике грида KeyUp проверяю нажатые клавиши (Ентер или Ф2) и вызываю ИнпутБокс.

После ввода значения и подтверждения Ентером тут же повторно открывается ИнпутБокс.
Как предотвратить?


 
junglecat ©   (2014-09-26 15:21) [1]

а почему не KeyPress?


 
Дмитрий   (2014-09-26 15:44) [2]

Ф2 не отрабатывается по КейПресс


 
junglecat ©   (2014-09-28 11:35) [3]

тогда почему не KeyDown?


 
Дмитрий   (2014-09-30 14:38) [4]

чтобы обработка происходила при отпускании клавиши
думаете, повлияет на сабж?


 
junglecat ©   (2014-09-30 14:52) [5]

повлияет, так как сейчас ловится ненужный keyup от инпутбокса, судя по всему


 
Дмитрий   (2014-09-30 15:55) [6]

взамен будет ловиться ненужный кейдаун
разве нет?


 
junglecat ©   (2014-09-30 15:59) [7]

нет. кейдаун уже отловлен инпутбоксом при закрытии


 
Дмитрий   (2014-09-30 16:50) [8]

почему кейап не ловится?


 
junglecat ©   (2014-09-30 17:21) [9]

потому что модальные диалоги закрываются по факту нажатия, а не отпускания


 
Плохиш ©   (2014-09-30 18:36) [10]

Key := 0;


 
junglecat ©   (2014-09-30 21:00) [11]

> Key := 0;

здесь не поможет


 
Плохиш ©   (2014-10-01 00:33) [12]


> здесь не поможет

это скажет системе, что нажатие кнопки уже обработано и дальнейшая обработка не требуется.


 
junglecat ©   (2014-10-01 10:06) [13]

> [12] Плохиш ©   (01.10.14 00:33)

в данном случае мы все равно попадем в обработчик keyup после закрытия инпутбокса, так что не сработает


 
Дмитрий   (2014-10-01 14:36) [14]

> Key := 0;

подтверждаю,
пробовал - не памагаит
((((


 
junglecat ©   (2014-10-01 15:00) [15]

если уж очень хочется повесить на keyup, то нужен костыль
типа
S := InputBox(...);
if (S <> "") then begin
 ...
 PeekMessage(Msg, Handle, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE);
end;
либо
if FInputConfirmed then begin
 FInputConfirmed := false;
 Exit;
end;
S := InputBox(...);
if (S <> "") then begin
 FInputConfirmed := true;
...
end;


 
Дмитрий   (2014-10-06 18:22) [16]

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

вариант с
PeekMessage(WinMsg, Handle, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE);
не помог, лишний "ентер" не сбрасывается



Страницы: 1 вся ветка

Текущий архив: 2016.05.01;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.005 c
15-1440106202
Юрий
2015-08-21 00:30
2016.05.01
С днем рождения ! 21 августа 2015 пятница


15-1439585926
Sha
2015-08-14 23:58
2016.05.01
Головоломка выходного дня.


15-1438978574
Dimka Maslov
2015-08-07 23:16
2016.05.01
Такие вот дела.


2-1412527275
hook
2014-10-05 20:41
2016.05.01
hook на WM_Destroy


15-1440192604
Юрий
2015-08-22 00:30
2016.05.01
С днем рождения ! 22 августа 2015 суббота