Консультация № 143801
13.09.2008, 14:58
0.00 руб.
0 2 1
Здравствуйте Уважаемые эксперты. Я недавно занялся изученим Turbo pascal и еще далеко не со всеми его функциями знаком. Но меня интересует такая вещь, есть ли в нем такая функция чтобы при нажатии определенной клавиши осуществлялось определенное действие. Тоесть я представляю это таким образом
...
readln(x);
if x = 'd' then goto m1;
if x = 'a' then goto m2;
...
В общем я представляю х как string. Но мне хочется чтобы не надо было вводить и нажимать ЕNTER, а чтобы сразу после щелчка на определеную кнопку выполнялось действие. Пожалуйста подскажите, что для этого необходимо сделать. Заранее огромное спасибо.

Обсуждение

Неизвестный
13.09.2008, 15:49
общий
ReadKey - функция, читает символ из буфера клавиатуры {модуль Crt}
KeyPressed - функция определяет, была ли нажата клавиша на клавиатуре {модуль Crt}
давно
Мастер-Эксперт
425
4118
15.09.2008, 05:40
общий
это ответ
Здравствуйте, Пашков Дмитрий Владимирович!
Если это действие одноразовое, то можно воспользоваться одной функцией ReadKey из модуля CRT, вот например:
Код:
Program myprog1;
Uses Crt;

Var
x: Char;
Begin
x:=ReadKey; {Если до этого момента никакая клавиша не была нажата, то ReadKey ожидает нажати}
{Теперь, в зависимости от той или иной нажатой клавиши, выполняем определённые действия}
Case x of
'a': Begin
{Нажата клавиша a}
WriteLn('Нажата клавиша <a>');
WriteLn('Имитируем Abort...');
End;
'd': Begin
{Нажата клавиша d}
WriteLn('Нажата клавиша <d>');
Write('Имитируем бурную деятельность...');
End;
else
{Этот блок выполняется, если нажата любая другая клавиша кроме a и d.
Вставлять его желательно, т.к. люди часто ошибаются и им надо об ошибке сообщить.}
WriteLn('Эге! Про эту клавишу мы не договаривались - ', x);
End;
End.

Заметьте, я не использую goto, чтобы не бегать по программе в поисках того, что у нас назначено на нажатию определённой клавиши, а записал нужные действия сразу в блоке рапознавания нажатой клавиши.
Несколько другой случай, когда выход из программы осуществляется по нажатию какой-то определённой клавиши. Тут нам поможет ReadKey в сочетании с циклом:
Код:
Program myprog2;
Uses Crt;

Var
x: Char;
Begin
Repeat
x:=ReadKey;
WriteLn('Нажата клавиша - ', x);
Until x = #27;
WriteLn('Выход из программы...');
End.

Здесь программа в цикле отображает все нажатые клавиши и если нажата клавиша ESC, то цикл завершается и программа прерывается. Поскольку клавиша ESC не имеет отображения на экране, по крайней мере в текстовом режиме, то использован её код в сочетании с символом #. Многие неотображаемые на экране клавиши можно проверять по их коду в сочетании с символом #. Например клавиши "Стрелка влево" и "Стрелка вправо" имеют коды соответственно 75 и 77. При написании программы они будут обозначаться #75 и #77.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Форма ответа