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

Вниз

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

Наверх




Память: 0.46 MB
Время: 0.082 c
3-1285063680
yurikon
2010-09-21 14:08
2013.03.22
TADOQuery и TADODataSet


2-1331501068
Дмитрий
2012-03-12 01:24
2013.03.22
Сохранение файла из потока


4-1258539915
ТЧеловек
2009-11-18 13:25
2013.03.22
callback для регулировки громкости


15-1354134606
Юрий
2012-11-29 00:30
2013.03.22
С днем рождения ! 29 ноября 2012 четверг


2-1334607403
Непомнящий
2012-04-17 00:16
2013.03.22
Кончается память





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский