| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Обработка функции в OnKeyUp |
| Автор: Keeper89 14.11.2009, 22:07 |
| Доброго времени суток! В Edit'е выполняются некоторые операции при перемещении курсора в зависимости от его положения. Обрабатывается все в событии OnKeyUp. Проблема заключается в том, что при многократном нажатии клавиш (стрелок вправо-влево), приложение тормозит, т.к. соответственно запускает процедуру обработки в OnKeyUp по несколько раз. Вопрос: как лучше определить"последнее" нажатие, после которого запускать обработку? Та же ситуация возникает при большом количестве щелчков по эдиту. Заранее спасибо. |
| Автор: Akella 15.11.2009, 00:52 |
| Может потоки спасут? Добавлено через 2 минуты и 41 секунду Можно попробовать делать паузу, ждать следующего нажатия. Сработало событие OnKeyUp Пауза........ Сработало событие OnKeyUp Пауза Пауза закончилась Началась обработка, если нажатий больше не было. Ну как-то так. |
| Автор: Keeper89 15.11.2009, 01:25 |
А при чем тут они? Что если проверять в выполняемой процедуре состояние клавиш стрелок - например, через GetKeyState или т.п.? |
| Автор: kami 15.11.2009, 02:07 | ||
Имхо, Get[Async]KeyState не спасет - он просто будет выдавать "да, действительно, клавиша отжата", ибо так оно и будет. Имхо, здесь нужно как-то так:
Таким образом, если клавиши будут нажиматься чаще, чем нужный_промежуток, то будет меняться время из п.2 и соответственно проверка всего хозяйства в таймере не даст выполниться своей_процедуре. Хотя, может стоит подумать об изменении логики работы? |
| Автор: Keeper89 15.11.2009, 14:32 | ||
Я делаю что-то похожее на Code Insight при вводе текста в Edit или установке в него фокуса (щелчке мыши). Можно ли это сделать лучше чем у меня? Добавлено @ 14:33
Я имею ввиду осуществлять проверку в запускаемой процедуре - если клавиша нажата пока она работает - выйти из процедуры. === Вопрос решился: буду использовать http://delphikingdom.ru/asp/answer.asp?IDAnswer=74138. |