Подскажите пожалуйста. Есть такая ситуация: в программе, написаной на Delphi, по нажатию кнопки запускается процесс и он может идти очень долго в цикле, как сделать, чтобы в конце выполнения цикла проверялось небыло ли в процессе выполнения цикла нажатия на клавиши на клавиатуре(определённую клавишу, например ESC) и производился выход из цикла (допустим булевская переменная меняла своё значени, а это условие конца выполнения цикла). Как такое реализовать? На Pascal'е это команда KeyPressed, а в Delphi есть аналог?
Заранее благодарен.
Реакция на нажатие клавиш.
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Нужно ловить WM_KEYDOWN и в обработчике менять флажок. Сам процесс должен выполняться не в цикле, а по таймеру. После каждой итерации таймера должна стоять проверка значения флажка и уничтожение таймера, если потребуется.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Есть еще решение - не допустить подобной ситуации.
Если кнопка запускает что-то, выполняющееся долго, то можно на время выполнения этого процесса ей сказать Enabled:=false.
У этого решения есть еще один плюс - дружественный интерфес. Т.е. помимо вывешивания песочных часов пользователю можно показать, что эта кнопка делает свое дело, и нефиг ее давить
Если кнопка запускает что-то, выполняющееся долго, то можно на время выполнения этого процесса ей сказать Enabled:=false.
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Enabled:=false;
try
...........
finally
Button1.Enabled:=true;
end;
end;
У этого решения есть еще один плюс - дружественный интерфес. Т.е. помимо вывешивания песочных часов пользователю можно показать, что эта кнопка делает свое дело, и нефиг ее давить

Romeo, можно по подробнее рассказать как это сделать?
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Что именно не понятно?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.