![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
Доброго времени суток!
В Edit'е выполняются некоторые операции при перемещении курсора в зависимости от его положения. Обрабатывается все в событии OnKeyUp. Проблема заключается в том, что при многократном нажатии клавиш (стрелок вправо-влево), приложение тормозит, т.к. соответственно запускает процедуру обработки в OnKeyUp по несколько раз. Вопрос: как лучше определить"последнее" нажатие, после которого запускать обработку? Та же ситуация возникает при большом количестве щелчков по эдиту. Заранее спасибо. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Может потоки спасут?
Добавлено через 2 минуты и 41 секунду Можно попробовать делать паузу, ждать следующего нажатия. Сработало событие OnKeyUp Пауза........ Сработало событие OnKeyUp Пауза Пауза закончилась Началась обработка, если нажатий больше не было. Ну как-то так. |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
А при чем тут они? Что если проверять в выполняемой процедуре состояние клавиш стрелок - например, через GetKeyState или т.п.? Это сообщение отредактировал(а) Keeper89 - 15.11.2009, 01:30 |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
Имхо, Get[Async]KeyState не спасет - он просто будет выдавать "да, действительно, клавиша отжата", ибо так оно и будет. Имхо, здесь нужно как-то так:
Таким образом, если клавиши будут нажиматься чаще, чем нужный_промежуток, то будет меняться время из п.2 и соответственно проверка всего хозяйства в таймере не даст выполниться своей_процедуре. Хотя, может стоит подумать об изменении логики работы? |
|||
|
||||
| Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Ну проверяй, а при чём здесь GetKeyState? Добавлено через 59 секунд
Вызывать поток в событии OnKeyUp. А вот поток уже будет выполнять обработку. Таким образом приложение тормозить не будет. |
||||
|
|||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
Я делаю что-то похожее на Code Insight при вводе текста в Edit или установке в него фокуса (щелчке мыши). Можно ли это сделать лучше чем у меня? Добавлено @ 14:33
Я имею ввиду осуществлять проверку в запускаемой процедуре - если клавиша нажата пока она работает - выйти из процедуры. === Вопрос решился: буду использовать потоки. Это сообщение отредактировал(а) Keeper89 - 20.11.2009, 02:00 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |