Написание меню (псевдографика) - PascalABC.NET
Формулировка задачи:
Пишу для своей программы на Pascal ABC.Net простое вертикальное меню, оформленное псевдографикой и, содержащее 4 элемента, соответственно курсор может находиться в 4 позициях: (26,11); (26, 13); (38, 14); (33, 18). Меню я делаю через readkey и у меня следующая проблема: не знаю как заставить программу после каждого цикла ожидать нажатия клавиши, а то (насколько я понял) курсор перемещается в следующую позицию, потом автоматически в следующую и так далее. Мне не нужно, чтобы вы за меня прописали всё меню, просто помогите решить эту проблему на примере нажатия кнопки вниз (коды: #0, #40). Заранее спасибо.
Решение задачи: «Написание меню (псевдографика)»
textual
Листинг программы
uses crt; type ItemArr=array[1..20] of string; var a:ItemArr; s:string; NItems,i:integer; function menu(Items:ItemArr;n,x1,y1,x2,y2,color:integer):integer; var i,j,k:integer; c:char; begin window(1,1,80,25); textbackground(Color); textcolor(White); clrscr; i:=1; k:=x2-x1; repeat for j:=1 to n do begin if j=i then begin textbackground(LightBlue); textcolor(LightRed); end else begin textbackground(color); textcolor(White); end; gotoxy(k div 2-length(Items[j]) div 2,1+j); write(Items[j]); end; c:=readkey; if c=#0 then begin c:=readkey; case ord(c) of 38: if i>1 then i:=i-1 else i:=n; 40: if i<n then i:=i+1 else i:=1; end; end; until c=#13; menu:=i; end; begin clrscr; NItems:=3; a[1]:='Меню1'; a[2]:='Меню2'; a[3]:='Выход'; repeat i:=menu(a,NItems,20,10,60,10+NItems+1,green); if i=NItems then exit else begin clrscr;writeln('Выбран пункт меню:',i);readln;end; until false; end.
Объяснение кода листинга программы
- Используемая библиотека: В коде используется библиотека CRT (Console Control Rutines), которая предоставляет функции для работы с консолью.
- Тип данных: Вводится новый тип данных ItemArr, который представляет собой массив строк (строковых переменных) длиной до 20 элементов.
- Переменные:
- a: Массив строк, в котором хранятся названия пунктов меню.
- s: Строка, используемая для вывода информации на экран.
- NItems, i: Целые числа, используемые для отслеживания текущего выбранного пункта меню и общего количества пунктов меню.
- Функция menu: Функция menu принимает на вход массив строк Items, количество пунктов меню n, координаты начала и конца отображения меню на экране (x1,y1,x2,y2), а также цвет фона (color). Функция отвечает за отображение меню на экране и обработку пользовательского ввода.
- Внутри функции menu происходит установка начального цвета фона и текста, очистка экрана.
- Затем в цикле repeat отображается каждый пункт меню. Если выбранный пункт меню совпадает с текущим, то цвет фона меняется на светло-синий, цвет текста - на красный. Если пункт меню не выбран, то цвет фона устанавливается равным color, а цвет текста - белый.
- После отображения всех пунктов меню пользователю предлагается ввести символ для выбора пункта меню. Если введен символ #13 (возврат каретки), то функция завершается.
- В зависимости от введенного символа (38 - стрелка вверх, 40 - стрелка вниз) изменяется текущий выбранный пункт меню.
- Функция menu возвращает значение i, которое представляет собой номер выбранного пункта меню.
- Основная часть программы: В основной части программы устанавливаются начальные значения переменных NItems и a. Затем в цикле repeat вызывается функция menu. Если выбранный пункт меню равен NItems (выход из меню), то цикл прекращается. В противном случае на экран выводится сообщение о выбранном пункте меню, и пользователю предлагается ввести что-нибудь.
- Цвета: В коде используются следующие цвета:
- white (белый): цвет текста по умолчанию.
- red (красный): цвет текста для выбранного пункта меню.
- lightblue (светло-синий): цвет фона для выбранного пункта меню.
- green (зеленый): цвет фона для последнего пункта меню.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д