Написание меню (псевдографика) - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Пишу для своей программы на Pascal ABC.Net простое вертикальное меню, оформленное псевдографикой и, содержащее 4 элемента, соответственно курсор может находиться в 4 позициях: (26,11); (26, 13); (38, 14); (33, 18). Меню я делаю через readkey и у меня следующая проблема: не знаю как заставить программу после каждого цикла ожидать нажатия клавиши, а то (насколько я понял) курсор перемещается в следующую позицию, потом автоматически в следующую и так далее. Мне не нужно, чтобы вы за меня прописали всё меню, просто помогите решить эту проблему на примере нажатия кнопки вниз (коды: #0, #40). Заранее спасибо.
Листинг программы
  1. Begin
  2. draw_menu(x,y);//otrisovka menu
  3. x:=26;
  4. y:=11;
  5. gotoxy(x,y);
  6. repeat
  7. c:=readkey;
  8. if c=#0 then
  9. Begin
  10. c:=readkey;
  11. if c=#40 then
  12. Begin
  13. if y=11 then y:=13;
  14. //Tut ya pisal if y=13 then begin y:= 13; x:=38 end; i tak dalee
  15. End;
  16. gotoxy(x,y);
  17. End;
  18. until c=#13;
  19. //dal'she ya znayu chto delat'
  20. End.

Решение задачи: «Написание меню (псевдографика)»

textual
Листинг программы
  1. uses crt;
  2. type ItemArr=array[1..20] of string;
  3. var
  4.   a:ItemArr;
  5.   s:string;
  6.   NItems,i:integer;
  7. function menu(Items:ItemArr;n,x1,y1,x2,y2,color:integer):integer;
  8. var
  9.   i,j,k:integer;
  10.   c:char;
  11. begin
  12.   window(1,1,80,25);
  13.   textbackground(Color);
  14.   textcolor(White);
  15.   clrscr;
  16.   i:=1;
  17.   k:=x2-x1;
  18.   repeat
  19.     for j:=1 to n do begin
  20.       if j=i then begin
  21.         textbackground(LightBlue);
  22.         textcolor(LightRed);
  23.       end else begin
  24.         textbackground(color);
  25.         textcolor(White);
  26.        end;
  27.        gotoxy(k div 2-length(Items[j]) div 2,1+j);
  28.      write(Items[j]);
  29.     end;
  30.     c:=readkey;
  31.     if c=#0 then begin
  32.       c:=readkey;
  33.       case ord(c) of
  34.         38: if i>1  then i:=i-1 else i:=n;
  35.         40: if i<n then i:=i+1 else i:=1;
  36.       end;
  37.     end;
  38.   until c=#13;
  39.   menu:=i;
  40. end;
  41. begin
  42.   clrscr;
  43.   NItems:=3;
  44.   a[1]:='Меню1';
  45.   a[2]:='Меню2';
  46.   a[3]:='Выход';
  47.   repeat
  48.     i:=menu(a,NItems,20,10,60,10+NItems+1,green);
  49.     if i=NItems then exit else begin clrscr;writeln('Выбран пункт меню:',i);readln;end;
  50.   until false;
  51. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы