0 / 0 / 0
Регистрация: 03.06.2021
Сообщений: 4
1

Подсчет количества нажатий клавиш управления курсором

06.06.2021, 11:35. Показов 1747. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Напишите программу, которая подсчитывает количество нажатий клавиш управления курсором. Например, 'Влево — 1, Вверх — 0, Вправо — 5, Вниз — 37.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2021, 11:35
Ответы с готовыми решениями:

Подсчет нажатий клавиш на клавиатуре
Приветствую. Понадобилось сделать сабж, но дело тут вот в чем. Счетчик должен плюсовать только...

Написать программу,которая подсчитывает кол-во нажатий клавиш управления курсором
Написать программу,которая подсчитывает кол-во нажатий клавиш управления...

Составьте программу управления танком на экране с помощью клавиш управления курсором
Составьте программу управления танком на экране с помощью клавиш управления курсором. Танк должен...

Подсчет и перехват нажатий клавиш
Всем привет! Вот недавно попытался создать счетчика нажатий кнопок, но он очень нестабилен. Создал...

12
Модератор
9238 / 6021 / 2374
Регистрация: 21.01.2014
Сообщений: 25,757
Записей в блоге: 3
06.06.2021, 12:02 2
1. Положить на форму метку.
2. Свойство Caption метки установить в такое: Up - 0, Down - 0, Left - 0, Right - 0
3. Установить свойство формы KeyPreview в true
4. Создать для формы обработчик события OnKeyPress, в котором напишите:
Delphi
1
2
3
4
5
6
7
8
9
10
11
implementation
 
{$R *.dfm}
{$J+}  //<< !!!!!!!!!!!!!!!!!!!!!!!!
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
const A: array[0..3] of integer = (0, 0, 0, 0);
begin
  if Key in [37..40] then A[Key - 37] := A[Key - 37] + 1;
  Label1.Caption := Format('Up - %d, Down - %d, Left - %d, Right - %d', [A[1], A[3], A[0], A[2]]);
end;
Я не зря скопировал кода больше, чем один обработчик. Обратите внимание на директиву компилятора, которую я пометил комментарием //<< !!!!!!!!!!!!!!!!!!!!!!!! - она обязательна!
0
237 / 203 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
06.06.2021, 15:39 3
Цитата Сообщение от D1973 Посмотреть сообщение
Delphi
1
if Key in [37..40] then A[Key - 37] := A[Key - 37] + 1;
Кроме стрелок, будет реагировать на %&'(
Нужно расширенный код смотреть при обработке спец-символов.
0
Модератор
9238 / 6021 / 2374
Регистрация: 21.01.2014
Сообщений: 25,757
Записей в блоге: 3
06.06.2021, 16:41 4
Цитата Сообщение от Constcat Посмотреть сообщение
будет реагировать на %&'(
А у меня не реагирует. Вот никак!
Но, ежели чего, можно эту строку переписать по другому:
Delphi
1
if Key in [VK_LEFT..VK_DOWN] then A[Key - VK_LEFT] := A[Key - VK_LEFT] + 1;
0
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
06.06.2021, 16:53 5
Что-то не понял...
Цитата Сообщение от D1973 Посмотреть сообщение
4. Создать для формы обработчик события OnKeyPress, в котором напишите:
Цитата Сообщение от D1973 Посмотреть сообщение
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
0
Модератор
9238 / 6021 / 2374
Регистрация: 21.01.2014
Сообщений: 25,757
Записей в блоге: 3
06.06.2021, 16:56 6
Цитата Сообщение от Puporev Посмотреть сообщение
Что-то не понял...
Юрий Борисович, правильно не поняли! Описался! (ударение, ежели чего, на 3-й слог)
Естественно, правильно будет OnKeyDown
0
Модератор
3628 / 2149 / 759
Регистрация: 15.11.2015
Сообщений: 8,623
06.06.2021, 21:20 7
D1973, однако, количество событий OnKeyDown может быть больше, чем количество нажатий клавиш.
0
Модератор
9238 / 6021 / 2374
Регистрация: 21.01.2014
Сообщений: 25,757
Записей в блоге: 3
06.06.2021, 21:22 8
Цитата Сообщение от AzAtom Посмотреть сообщение
количество событий OnKeyDown может быть больше, чем количество нажатий клавиш
Да, конечно. Но не всегда код нажатой клавиши будет входить в указанное множество, правда?
0
Модератор
3628 / 2149 / 759
Регистрация: 15.11.2015
Сообщений: 8,623
06.06.2021, 21:41 9
D1973, я не про это. Если нажать и держать клавишу "Вверх", то это будет 1 нажатие, а программа посчитает количество чуть больше, чем 1.

Добавлено через 10 минут
Модифицировал программу от D1973, чтобы повторы при удержании не учитывались:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var
  Form1: TForm1;
  PrevKey: Word = 0;
 
implementation
 
{$R *.dfm}
{$J+}
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
const
  A: array[0..3] of integer = (0, 0, 0, 0);
begin
  if (Key in [37..40]) and (Key <> PrevKey) then A[Key - 37] := A[Key - 37] + 1;
  PrevKey := Key;
  Label1.Caption := Format('Up - %d, Down - %d, Left - %d, Right - %d', [A[1], A[3], A[0], A[2]]);
end;
 
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  PrevKey := 0;
end;
 
end.
0
Модератор
9238 / 6021 / 2374
Регистрация: 21.01.2014
Сообщений: 25,757
Записей в блоге: 3
06.06.2021, 21:41 10
AzAtom, ой, вот честно, про фиксированные нажатия я даже и не думал... (ой, блин, ну вот зуб даю, что школьный учитель, дающий задания, про этот момент вообще НЕ ЗНАЛ!)
0
237 / 203 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
07.06.2021, 00:01 11
Цитата Сообщение от D1973 Посмотреть сообщение
А у меня не реагирует. Вот никак!
Признаю!
Проверил - действительно, символы со совпадающими кодами %&'( не дают свой код в OnKeyDown, туда приходит Shift, а затем код цифры (48 - 57).
0
northener
07.06.2021, 02:07
  #12

Не по теме:

Цитата Сообщение от D1973 Посмотреть сообщение
(ой, блин, ну вот зуб даю, что школьный учитель, дающий задания, про этот момент вообще НЕ ЗНАЛ!
+100500
Но зуб не даю. У меня их и так меньше нормы. :)

0
Житель Земли
3002 / 3004 / 391
Регистрация: 26.07.2011
Сообщений: 11,463
Записей в блоге: 1
07.06.2021, 10:03 13
Цитата Сообщение от AzAtom Посмотреть сообщение
чтобы повторы при удержании не учитывались
надо просто код из KeyDown перенести в KeyUp. Всё!
0
07.06.2021, 10:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2021, 10:03
Помогаю со студенческими работами здесь

Отслеживание и подсчет правильных и неправильных нажатий клавиш
Приветствую всех, кто решил откликнуться! Ситуация такая, есть текст в текстовом документе, он...

подсчет количества нажатий
Добрый день, как подсчитать количество нажатий кнопки за последние 20 минут ( к примеру)ю В...

Какие коды у клавиш Enter и стрелок управления курсором?
Какие коды у стрелок и &quot;Enter&quot; на клавиатуре?

Движение текста по экрану с помощью клавиш управления курсором
осуществить движение текста по экрану с помощью клавиш управления курсором. Текст содержит имя...

Как можно фиксировать нажатия клавиш управления курсором?
Здравствуйте. Подскажите, как можно фиксировать нажатия клавиш управления курсором (вверх, вниз,...

Подсчет количества нажатий на клавиши
через хендл меседж вывел на экран подсчет кликов правой кнопки мышки, левой и средней, а вот как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru