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

Вниз

KeyPreview   Найти похожие ветки 

 
MrBadge   (2011-04-13 12:45) [0]

Столкнулся со следующей проблемой:
Необходимо, чтобы после нажатия определенной кнопки на форме, форма переставала реагировать на нажатия до определенного момента, причем сразу после нажатия. Однако получается, что пользователь может, например, зажать эту кнопку и программа из процедуры обработки нажатия выходить вообще не будет. Пробовал несколькими способами отключать клавиатуру, ставить KeyPreview:=False, однако, это все не помогает. Знает ли кто-нибудь действенный в этой ситуации способ?


 
clickmaker ©   (2011-04-13 13:20) [1]

> может, например, зажать эту кнопку и программа из процедуры
> обработки нажатия выходить вообще не будет

это как?


 
И. Павел ©   (2011-04-13 13:41) [2]

> [0] MrBadge   (13.04.11 12:45)

Может быть у вас в процедуре обработки нажатия стоит Application.ProcessMessages?
Сам обработчик нажатия выполняется в главном потоке (если других потоков вызывать не будет), и пока он не завершиться, новое сообщение обрабатываться не будет (если не дать для этого явную команду: Application.ProcessMessages).


 
Германн ©   (2011-04-13 13:46) [3]


> Знает ли кто-нибудь действенный в этой ситуации способ?
>

Не понятно что это за ситуация.


 
MrBadge   (2011-04-13 14:56) [4]

Application.ProcessMessages стоит как раз в той процедуре, которая должна прерывать FormKeyPress. Грубо говоря, ситуация такая: на форме есть таймер, меняющий задания. Если пользователь нажимает кнопку, то в зависимости от верности задания он получает или теряет очко. Однако, если он не будет отпускать кнопку, то задание по таймеру меняться не будет и его очки будут просто постоянно увеличиваться или уменьшаться.


 
clickmaker ©   (2011-04-13 15:08) [5]

> Однако, если он не будет отпускать кнопку

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


 
И. Павел ©   (2011-04-13 15:09) [6]

> [4] MrBadge   (13.04.11 14:56)

В обработчике нажатия кнопки вызывайте обработчик таймера. А таймер перезапускайте. Т.е:

...KeyPress(...)
Begin
//Проверка правильности, начисление баллов
 Timer1.OnTimer;
 Timer1.Enabled:=false;
 Timer1.Enabled:=true;
end


 
MrBadge   (2011-04-13 15:17) [7]

И. Павел, именно так я и делаю, но на процедуру формкипресс это никак не влияет и баллы все равно прибавляются бесконечно долго, если кнопку не отпускать.

clickmaker, есть ли способ отключить кнопку на короткий промежуток времени, не пользуясь key:=#0?


 
clickmaker ©   (2011-04-13 15:47) [8]

речь же шла о "нажатия определенной кнопки на форме". А теперь - кнопка на клаве, что-ли?


 
Германн ©   (2011-04-13 16:25) [9]


>  MrBadge   (13.04.11 15:17) [7]
>
> И. Павел, именно так я и делаю, но на процедуру формкипресс
> это никак не влияет и баллы все равно прибавляются бесконечно
> долго, если кнопку не отпускать.

Пора наконец показать код, а то ничего не понятно никому ни здесь, ни на сырцах.



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

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

Наверх




Память: 0.49 MB
Время: 0.064 c
2-1342447542
Sergio_Leone
2012-07-16 18:05
2013.03.22
Как определить запуск 3D приложения?


15-1330288203
Юрий
2012-02-27 00:30
2013.03.22
С днем рождения ! 27 февраля 2012 понедельник


9-1193300178
SergGG
2007-10-25 12:16
2013.03.22
Перевод координат в OpenGL


15-1350235025
Inovet
2012-10-14 21:17
2013.03.22
Прыжок из стратосферы. Трансляция.


15-1341989915
AV
2012-07-11 10:58
2013.03.22
никто по SSH не соединялся? В частности, через cryptlib