Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 13.02.2017
Сообщений: 6
1

Как регистрировать нажатие и отжатие клавиш?

13.02.2017, 15:49. Показов 2472. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
здравствуйте.
у меня такой вопрос.
как сделать так чтобы пока держишь пробел комп пищал не переставая, а когда отпускаешь, он тоже перестаёт пищать?
вот код как я это вижу:
Pascal
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
27
28
29
30
31
32
33
34
uses crt,Timers;
var
  kSpaceKey: integer;
  
/// Обработчик нажатия клавиши
procedure KeyDown(Key: integer);
begin
  case Key of
vk_Space: if kSpaceKey=2 then kSpaceKey := 1;
  end;
end;
 
/// Обработчик отжатия клавиши
procedure KeyUp(Key: integer);
begin
  case Key of
vk_Space: kSpaceKey := 2;
  end;
end;
 
/// Обработчик таймера
procedure TimerProc;
begin
  if kSpaceKey=1 then
  begin
system.console.beep(700,300);
    kSpaceKey := 0;
  end;
begin
  OnKeyDown := KeyDown;
  OnKeyUp := KeyUp;
  t := new Timer(1,TimerProc);
readln;
end.
подскажите что не так?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2017, 15:49
Ответы с готовыми решениями:

Нажатие-отжатие кнопок по нажатию-отжатию клавиш на клавиатуре
Всем доброго времени суток! Проблема такая: 1) В VB 6.0 нужно описать кнопку на нажатие и отжатие...

Нажатие - отжатие кнопки. Псевдо-класс :active
Здравствуйте. Проблема в том, что при нажатии на кнопку определены стили для псевдо-класса :active,...

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

Нажатие клавиш вне формы (глобальный перехват сочетания клавиш)
Всем доброго времени суток! Задумал сделать значок раскладки клавы, но беда в том, что если...

8
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
13.02.2017, 16:11 2
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
uses graphABC; 
/// Обработчик нажатия клавиши
procedure KeyDown(Key: integer);
begin
if Key=vk_Space then system.console.beep(700,300);//пока нажата клавиша, пищит
end;
begin
  OnKeyDown := KeyDown;
end.
1
0 / 0 / 0
Регистрация: 13.02.2017
Сообщений: 6
13.02.2017, 18:53  [ТС] 3
то есть crt подключать не надо?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
13.02.2017, 18:54 4
Нет, а зачем? Для процедуры нужен GraphABC.
0
0 / 0 / 0
Регистрация: 13.02.2017
Сообщений: 6
13.02.2017, 19:15  [ТС] 5
а как сделать так чтобы вот пока держишь пробел, оно пищит, а когда отпускаешь он тут же прекращал это дело?
и ещё что будет если увеличить длительность сигнала?

Добавлено через 2 минуты
то есть можно ли приостанавливать проигрывание?
есть же вроде процедура keyup?

Добавлено через 2 минуты
если добавить длительность, то он просто пищит дольше и всё.
а мне бы надо чтобы нажал отпустил.
просто хочу сделать как ключ морзе.

Добавлено через 10 минут
хочу сделать как на сайте telegraphist.ru
Javascript
1
2
3
4
5
6
7
8
9
10
 <bgsound id="bgs" src="http://telegraphist.ru/sites/default/files/attach/BEEP.MP3" loop="100" volume="0" balance="0" />
 <script language="javascript">
           function stopSound() {
                document.all.tags("bgsound")[0].volume = -10000; 
           } 
function restartStop() {
document.all.tags("bgsound")[0].volume = 0;
} 
stopSound();
btn.focus()
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
13.02.2017, 19:58 6
Может сделать точку и тире на разные клавиши, например так.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
uses graphABC; 
/// Обработчик нажатия клавиши
procedure KeyPress(Key: char);
begin
case key of
'1':system.console.beep(700,300);//точка
'2':begin//тире
    system.console.beep(700,100);
    system.console.beep(37,100);
    system.console.beep(700,100);
    end;
end;    
end;
begin
  OnKeyPress := KeyPress;
end.
0
0 / 0 / 0
Регистрация: 13.02.2017
Сообщений: 6
13.02.2017, 20:40  [ТС] 7
а можно сделать какой-нибудь beep.wav, и чтобы когда пробел нажимаешь он пищит, типа
play 'beep.wav';
а когда отпускаешь действует stop?
0
0 / 0 / 0
Регистрация: 13.02.2017
Сообщений: 6
18.02.2017, 11:06  [ТС] 8
а как для этого кода
Pascal
1
2
3
4
5
6
7
8
9
uses graphABC; 
/// Обработчик нажатия клавиши
procedure KeyDown(Key: integer);
begin
if Key=vk_Space then system.console.beep(700,300);//пока нажата клавиша, пищит
end;
begin
* OnKeyDown := KeyDown;
end.
сделать процедуру keyup что там будет с пробелом? в смысле как его там описать?

Добавлено через 11 минут
хотел как-то так сделать
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
uses graphABC, CRT;
const m: integer = 1000; // время мелодии в мсек.
path:= 'beep.wav'
 
/// Обработчик нажатия клавиши
procedure KeyDown(Key: integer);
begin
if Key=vk_Space then 
sound:= new system.Media.SoundPlayer;
sound.SoundLocation:= path;
//пока нажата клавиша, пищит
end;
 
var sound,s: system.Media.SoundPlayer;
begin
repeat
keydown; //пищит
keyup; //нет
until c=#27;
readln;
end.
получится?
0
0 / 0 / 0
Регистрация: 13.02.2017
Сообщений: 6
28.02.2017, 22:04  [ТС] 9
я ещё подумал, что можно как-то так попробовать:
Pascal
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
27
28
uses GraphABC,crt;
procedure KeyDown(Key: integer); 
begin
sound.Play;
delay(m);
End;
procedure KeyUp(Key: integer);
begin
sound.Stop;
delay(m);
End;
const m: integer = 1000; // время мелодии в мсек.
path:string='beep.wav';
var sound,s: system.Media.SoundPlayer;
begin
sound:= new system.Media.SoundPlayer;
sound.SoundLocation:= path;
Window.Title:='морзянка';
Window.Width:=465;
Window.Height:=60;
Window.CenterOnScreen();
Window.Clear(Color.Black);
SetFontColor(Color.Yellow);
SetFontStyle(fsBold);
SetFontSize(18);
OnKeyDown := KeyDown;
OnKeyUp := KeyUp;
end.
что скажете
0
28.02.2017, 22:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.02.2017, 22:04
Помогаю со студенческими работами здесь

Как заблокировать нажатие клавиш С++
Всем привет, заранее прошу не пинать за вопрос) Вопрос такой, сделал игру 2048 на с++ для курсача...

Как запретить нажатие клавиш?
Как мне в моем проекте запретить нажатие следующих клавиш Alt + tab alt + Ctrl + del Alt + F4...

Как запретить нажатие клавиш?
Как запретить нажатие клавиш?

Как имитировать нажатие клавиш?
Всем привет. Пишу небольшую программу и вот тут пришел к вопросу как имитировать нажатие клавиш...


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

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