Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как остановить многократное нажатие клавиши?

6.2K
09 июня 2007 года
santey
28 / / 31.12.2005
Кто-нибудь подскажет как можно решить данную проблему.

Имеется приложение вывода графики ститистики.
К примеру имеется горячая клавиша F5, которая вызывает
функцию рисования графика на канве формы.
Так вот если я нажимаю 4 раза или 6 раз подряд, или просто держу
клавишу F5 в течение нескольких секунд, то функция рисования графика рисует этот график многократно 4,6 или более раз без остановки. Нажатие клавиши F2 перехватывает ApplicationEvents.

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

Может быть есть такая функция, которая обнуляет многократное нажатие клавиши F5?
268
10 июня 2007 года
Михаил
587 / / 25.06.2005
при нажатии включай таймер, и только при его истечении снова обрабатывай нажатие
520
10 июня 2007 года
inkognitum
155 / / 03.05.2006
Цитата: santey
Кто-нибудь подскажет как можно решить данную проблему.

Имеется приложение вывода графики ститистики.
К примеру имеется горячая клавиша F5, которая вызывает
функцию рисования графика на канве формы.
Так вот если я нажимаю 4 раза или 6 раз подряд, или просто держу
клавишу F5 в течение нескольких секунд, то функция рисования графика рисует этот график многократно 4,6 или более раз без остановки. Нажатие клавиши F2 перехватывает ApplicationEvents.

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

Может быть есть такая функция, которая обнуляет многократное нажатие клавиши F5?



Для простоты картины можно завести переменную допустим bool key = false;
при нажатии на F5 переводишь key = true; предварительно проверяя на условие if (!key) {...}, если удовлетворяет то переводишь key = true, рисуешь на канве, включаешь таймер, а в таймере переводишь key = false; Timer->Enabled = false;

чтото типа того.

10
10 июня 2007 года
Freeman
3.2K / / 06.03.2004
Если подходит по задаче, можно завести булевскую переменную, хранящую "обновлялся ли график на экране с момента последнего изменения данных", обновлять только при изменении входных данных и обойтись безо всяких таймеров.
6.2K
11 июня 2007 года
santey
28 / / 31.12.2005
ApplicationEvents является глухим обработчиком, и если в него даже вставить Application->ProcessMessages(), то второй заход в обработчик не ловится и никакая переменная не поможет.
Очевидно лучшим выходом была бы какая-нибудь функция обнуляющая очередь нажатий клавиши, то тогда захода в обработчик вообще не было, но что-то такой функции не нашел.
6.2K
11 июня 2007 года
santey
28 / / 31.12.2005
Да через таймер попробовал, довольно таки неплохое решение, можно сразу ряд кнопок блокировать на многократное нажатие.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог