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

Ваш аккаунт

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

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

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

И снова о клаве (скорость повтора)

7.0K
09 июня 2007 года
Rusd
88 / / 26.08.2006
Приложение должно реагировать на нажатие клавиш. Если зажать к-либо клавишу, то событие KeyDown (как процедура отлова сообщения wm_keydown) наступает с определенной частотой, зависящей от настроек в "Панель управления>Клавиатура>Скорость>Скорость повтора" и "задержка перед началом повтора". Если кто знает, подскажите как програмно изменить эти параметры, или как самому проверить нажата ли в данный момент к-либо клавиша и какая именно (аналоги паскалевских readkey и keypressed).
25K
09 июня 2007 года
Cерый
10 / / 18.02.2007
Элемент управления, получивший фокус ввода, получает сообщения wm_keydown. Его обработчик сообщения определяет, собственно, реакцию приложения на нажатие клавиш.
Строго говоря, решить проблему контроля клавиатурных нажатий можно глобально на уровне приложения, например, определив обработчик Application.OnMessage. Полагаю, для этого должны иметься довольно веские причины, обусловленные характером задачи.
Скорость повтора можно изменить:
SystemParametersInfo(SPI_SETKEYBOARDSPEED, timeSpeed, nil, SPIF_UPDATEINIFILE);
где timeSpeed - переменная целого типа, принимающая значения от 0 до 31.
Хочу заметить, что мне не удалось построить ни одного предположения, оправдывающего применение изменения этого параметра приложением, как с точки зрения конструктива архитектуры приложения, так и с точки зрения этики построения взаимодействия приложения с пользователем.
Возможно, нам удастся обсудить Вашу задачу более детально.
С наилучшими пожеланиями, Серый.
4.6K
10 июня 2007 года
Tokolist
268 / / 22.03.2007
Вот, что пришло в голову:

1. можно проверять параметр lParam сообщения WM_KEYDOWN на количество срабатываний.

2. можно игнорировать сообщение WM_KEYDOWN и выставить таймер в котором через определенное количество времени проверять состояние клавиш с помощью GetKeyState или GetKeyboardState.
268
10 июня 2007 года
Михаил
587 / / 25.06.2005
при получении сообщения wm_keydown устанавливай какой-либо флаг, означабщий что клавиша нажата, а при wm_keyup убирай флаг
4.6K
10 июня 2007 года
Tokolist
268 / / 22.03.2007
Цитата: Михаил
при получении сообщения wm_keydown устанавливай какой-либо флаг, означабщий что клавиша нажата, а при wm_keyup убирай флаг



Это если нужно чтобы событие происходило только один раз, а автор (как я понял) хочет изменить частоту события, то бишь если в системе она, к примеру, раз в 0.5 сек., то в приложении она должна быть раз в 2 секунды.

10
10 июня 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: Rusd
самому проверить нажата ли в данный момент к-либо клавиша и какая именно (аналоги паскалевских readkey и keypressed).


API GetKeyState, GetKeyboardState.

4.6K
10 июня 2007 года
Tokolist
268 / / 22.03.2007
Цитата: Freeman
API GetKeyState, GetKeyboardState.



Ну я уже вроде указал на эти ф-и в посте #3 :)

7.0K
11 июня 2007 года
Rusd
88 / / 26.08.2006
"GetKeyState, GetKeyboardState"
То что искал. Всем спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог