|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как проверить что кнопка отжата? (без событий)
Из программы я удалил все формы и оставил только Project1. Там я сделал бесконечный цикл с задержкой и нужна команда которая проверяет отжатие клавиши. Я нашёл только похожую команду - GetAsyncKeyState(), она показывает какая клавиша была нажата. У меня малая задержка в цикле и когда я нажимаю и сразу отпускаю клавишу, в файл выводится информация о том, что я нажал на кнопку 30 раз, а не 1.
Есть ли такая команда, которая проверяет отжатие клавиши? |
#2
|
||||
|
||||
Объяви массив из 256 элементов типа Boolean используй GetKeyboardState для проверки состояния клавиш клавиатуры и анализируй свой массив. Или же можешь проверять по одной клавише GetKeyState/GetAsyncKeyState
Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение: | ||
Cognizer (24.04.2017)
|
#3
|
||||
|
||||
Наверное лучше обрабатывать сообщения WM_KEYDOWN\WM_KEYUP, цикл будет ненужон, а если через GetKeyState, тогда необходимо "глушить" повторы, вот пример на таймере, вспоминать, как дербанить проект нету времени
Код:
var i: smallint; procedure TForm1.Timer1Timer(Sender: TObject); begin if i <> GetKeyState(VK_Shift) then begin if GetKeyState(VK_Shift) and $8000 <> 0 then Memo1.Lines.Add('Shift Down') else Memo1.Lines.Add('Shift Up'); i:= GetKeyState(VK_Shift); end else exit; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#4
|
|||
|
|||
Цитата:
|
#5
|
||||
|
||||
Цитата:
Код:
If ((GetKeyState(VK_CONTROL) AND 128)=128) and ((GetKeyState(VK_F5) AND 128)=128) and ((GetKeyState(ord('8')) AND 128)=128) then ShowMessage('CTRL+F5+8 Pressed'); Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Cognizer (24.04.2017)
|
#6
|
|||
|
|||
Ещё хотел бы узнать чем отличается GetKeyState от GetAsyncKeyState
|
#7
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Cognizer (24.04.2017)
|
#8
|
|||
|
|||
Вроде бы как пришло в мою голову решение проблемы:
Код:
var i : byte; keyboardState,keyboardStateNew : array[0..255] of bool; next : bool; ... begin for i := 65 to 90 do //Проверка клавиш 'a'..'z' begin if GetASYNCKeyState(i) <> 0 then keyboardStateNew[i] := True else keyboardStateNew[i] := false; if (keyboardState[i] <> keyboardStateNew[i]) then next := true; keyboardState[i] := keyboardStateNew[i]; end; if next then ... next := false end; Ладно, спасибо всем за помощь) |