Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задержка перед повтором нажатия клавиши, Как отменить задержку? 
:(
    Опции темы
Seniya_Lutiy
Дата 18.2.2005, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.2.2005

Репутация: нет
Всего: нет



Здравствуйте. У меня такой вопрос: как отменить задержку перед началом повтора? (Мне нужно перемещать объект по экрану, как это делается в играх, с помощью клавиш, но из-за задержки приходится ждать начала повтора около секунды).
PM MAIL   Вверх
mvdr
Дата 18.2.2005, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: нет
Всего: 42



а если время в Timer уменьшить?


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
dm9
Дата 18.2.2005, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 1
Всего: 137



Seniya_Lutiy, просто ловить надо не onKeyPress, а событие нажатия и отпускания клавиши (onKeyDown, onKeyUp). Между нажатием и отпусканием обработка идёт самостоятельно (ну, таймер там использовать можно, например...)
PM MAIL ICQ   Вверх
Seniya_Lutiy
Дата 19.2.2005, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.2.2005

Репутация: нет
Всего: нет



Понятно. я знаю, что код нажатой клавиши хранится в wParam, как его отдуда выташить? (Пример, если можно).
PM MAIL   Вверх
dm9
Дата 19.2.2005, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 1
Всего: 137



Тебя onKeyDown не устраивает? Там никаких wParam нету, сразу код выдаётся.

А как вытащить код из wParam, если ты ловишь WM_KEYDOWN? Так wParam в чистом виде и есть virtual-key code. См. в Delphi пункт меню Help->Windows SDK. И там WM_KEYDOWN.

Ты задачу бы получше описал...

PM MAIL ICQ   Вверх
Александра
Дата 20.2.2005, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.2.2005
Где: Москва

Репутация: 1
Всего: 12



как вариант уменьшить вручную ее скорость в системе.

Код

SystemParametersInfo(SPI_SETKEYBOARDDELAY, {нужное значение}, 0, SPIF_UPDATEINIFILE or SPIF_SENDWININICHANGE);

--------------------
PM   Вверх
Snowy
Дата 21.2.2005, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Нууу... Уменьшать скорость в системе... Радикально, радикально...
Разве пользователь об этом просил? Как он потом в ворде работать будет?
Проще использовать альтернативные способы чтения с клавиатуры, благо их предостаточно.
PM MAIL   Вверх
Akina
Дата 21.2.2005, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20580
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



По KeyDown ты должен запоминать факт нажатия, по KeyUp - очищать (т.е. хранить дубль KeyState) либо пользоваться напрямую KeyState. А вот обрабатывать нажатые кнопы - только по таймеру нужной тебе частоты срабатывания, а не в обработчике клавиатурных событий.

Программно же задержку убрать нельзя, поскольку она - аппаратная. Можно ее уменьшить до 0.25 сек. - но это предел.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Александра
Дата 21.2.2005, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.2.2005
Где: Москва

Репутация: 1
Всего: 12



Snowy
не согласна, сначало естественно запоминается то что есть в системе, а при выходе восстанавливается... просто вопрос не совсем понятен, имеено как реализует его автор, поэтому я и дала ответ о том как просто уменьшить задержку повтора...
--------------------
PM   Вверх
Snowy
Дата 21.2.2005, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Все равно не согласен. А если прога вылетит, а если некорректный код и восстанавливаться либо не будет, либо будет, но не всегда.
Да и вообще, я могу в это время параллельно работать с другими программами. Им от этого лучше не станет.
Нужно просто использоваь корректную работу с клавиатурой, а не придумывать, как приспособить систему под свою программу smile
Вот, например варианты:
GetKeyState, GetKeyboardState, GetAsyncKeyState, keybd_event, Application.OnShortCut... вариантов много...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1281 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.