Написание меню (псевдографика) - PascalABC.NET
Формулировка задачи:
Пишу для своей программы на Pascal ABC.Net простое вертикальное меню, оформленное псевдографикой и, содержащее 4 элемента, соответственно курсор может находиться в 4 позициях: (26,11); (26, 13); (38, 14); (33, 18). Меню я делаю через readkey и у меня следующая проблема: не знаю как заставить программу после каждого цикла ожидать нажатия клавиши, а то (насколько я понял) курсор перемещается в следующую позицию, потом автоматически в следующую и так далее. Мне не нужно, чтобы вы за меня прописали всё меню, просто помогите решить эту проблему на примере нажатия кнопки вниз (коды: #0, #40). Заранее спасибо.
Листинг программы
- Begin
- draw_menu(x,y);//otrisovka menu
- x:=26;
- y:=11;
- gotoxy(x,y);
- repeat
- c:=readkey;
- if c=#0 then
- Begin
- c:=readkey;
- if c=#40 then
- Begin
- if y=11 then y:=13;
- //Tut ya pisal if y=13 then begin y:= 13; x:=38 end; i tak dalee
- End;
- gotoxy(x,y);
- End;
- until c=#13;
- //dal'she ya znayu chto delat'
- End.
Решение задачи: «Написание меню (псевдографика)»
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 (зеленый): цвет фона для последнего пункта меню.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д