Главная страница
    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.072 c
15-1346830391
LDV
2012-09-05 11:33
2013.03.22
Delphi directory


15-1338635972
М
2012-06-02 15:19
2013.03.22
Зависает при потоке


15-1338398557
Биос
2012-05-30 21:22
2013.03.22
Три звуковых сигнала из системника.


2-1336222680
Глеб
2012-05-05 16:58
2013.03.22
Редактирование надписей в компоненте едит


11-1182871715
Robt
2007-06-26 19:28
2013.03.22
снова TrackBar





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