Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2016.05.01;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.002 c
2-1412527275
hook
2014-10-05 20:41
2016.05.01
hook на WM_Destroy


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


15-1439244279
Германн
2015-08-11 01:04
2016.05.01
Футы и узлы в современной авиации.


15-1431731742
Германн
2015-05-16 02:15
2016.05.01
Какой бесплатный почтовый сервер можете посоветовать?


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский