Написание меню (псевдографика) - 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.

Объяснение кода листинга программы

  1. Используемая библиотека: В коде используется библиотека CRT (Console Control Rutines), которая предоставляет функции для работы с консолью.
  2. Тип данных: Вводится новый тип данных ItemArr, который представляет собой массив строк (строковых переменных) длиной до 20 элементов.
  3. Переменные:
    • a: Массив строк, в котором хранятся названия пунктов меню.
    • s: Строка, используемая для вывода информации на экран.
    • NItems, i: Целые числа, используемые для отслеживания текущего выбранного пункта меню и общего количества пунктов меню.
  4. Функция menu: Функция menu принимает на вход массив строк Items, количество пунктов меню n, координаты начала и конца отображения меню на экране (x1,y1,x2,y2), а также цвет фона (color). Функция отвечает за отображение меню на экране и обработку пользовательского ввода.
    • Внутри функции menu происходит установка начального цвета фона и текста, очистка экрана.
    • Затем в цикле repeat отображается каждый пункт меню. Если выбранный пункт меню совпадает с текущим, то цвет фона меняется на светло-синий, цвет текста - на красный. Если пункт меню не выбран, то цвет фона устанавливается равным color, а цвет текста - белый.
    • После отображения всех пунктов меню пользователю предлагается ввести символ для выбора пункта меню. Если введен символ #13 (возврат каретки), то функция завершается.
    • В зависимости от введенного символа (38 - стрелка вверх, 40 - стрелка вниз) изменяется текущий выбранный пункт меню.
    • Функция menu возвращает значение i, которое представляет собой номер выбранного пункта меню.
  5. Основная часть программы: В основной части программы устанавливаются начальные значения переменных NItems и a. Затем в цикле repeat вызывается функция menu. Если выбранный пункт меню равен NItems (выход из меню), то цикл прекращается. В противном случае на экран выводится сообщение о выбранном пункте меню, и пользователю предлагается ввести что-нибудь.
  6. Цвета: В коде используются следующие цвета:
    • white (белый): цвет текста по умолчанию.
    • red (красный): цвет текста для выбранного пункта меню.
    • lightblue (светло-синий): цвет фона для выбранного пункта меню.
    • green (зеленый): цвет фона для последнего пункта меню.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5
Похожие ответы