Readkey без ожидания - Free Pascal
Формулировка задачи:
Бодрого времени суток, господа.
Возникла такая ситуация. Вот (сильно упрощенный) код:
есть такое меню в процедуре MyMenu:
и нужно, чтобы его можно было вызывать по необходимости с помощью Esc.
Я это сделал это так:
И все бы хорошо, но программа стоит на одном месте и ждет нажатия на какую-нибудь клавишу.
Вопрос - можно ли это реализовать как-то, чтобы не было этого ожидания. Вполне возможно я думаю совершенно не в ту сторону и это реализуется абсолютно по-другому.
menu[1]:=' Начать снова '; menu[2]:=' Загрузить данные '; menu[3]:=' Сохранить данные '; menu[4]:=' Сохранить и выйти '; menu[5]:=' Просто выйти ';
writeln('Для вызова меню нажмите Esc');
ch:=readkey; // считываем нажатие Esc
if ch=#27 then // если нажали
MyMenu; // вызываем процедуру с меню
writeln('Введите данные');
writeln('--------------------------------');
write('Расход топлива, кг : '); readln(dm);
write('Время маневра, сек : '); readln(dt);Решение задачи: «Readkey без ожидания»
textual
Листинг программы
writeln('Для вызова меню нажмите Esc');
ch:=readkey; // считываем нажатие Esc
if ch=#27 then // если нажали
MyMenu; // вызываем процедуру с меню
{И вот тут программа тупо ждет нажатия какой-либо клавиши. Затем продолжает:}
writeln('Введите данные');
writeln('--------------------------------');
write('Расход топлива, кг : '); readln(dm);
write('Время маневра, сек : '); readln(dt);
Объяснение кода листинга программы
writeln('Для вызова меню нажмите Esc');- вывод сообщения о том, что для вызова меню необходимо нажать клавишу Escch:=readkey;- считывание нажатой клавиши и присвоение ее значения переменнойchif ch=#27 then- проверка, была ли нажата клавиша EscMyMenu;- вызов процедуры с менюwriteln('Введите данные');- вывод сообщения о необходимости ввода данныхwriteln('--------------------------------');- добавление разделителей для ввода данныхwrite('Расход топлива, кг : ');- вывод сообщения о необходимом вводе расхода топливаreadln(dm);- считывание введенного значения расхода топлива и присвоение его переменнойdmwrite('Время маневра, сек : ');- вывод сообщения о необходимом вводе времени маневраreadln(dt);- считывание введенного значения времени маневра и присвоение его переменнойdt