Форматы меню. Алгоритм построения вертикального меню

В процессе своей работы за компьютером пользователь постоянно встречается с меню различных форматов. Сущность структуры меню заключается в том, что у пользователя есть список возможных вариантов данных для ввода, среди которых ему необходимо выбрать то, что требуется.

Основные форматы меню следующие:

¾ список объектов, выбираемых указанием числовых кодов, например,

1. Открыть базу данных
2. Отредактировать
3. Поиск в базе данных
4. Отсортировать
5. Выход

¾ список объектов, выбираемых указанием мнемонических кодов:

Соб Собственность
Трн Транспорт
Меб Мебель
Рзн Разное
Кон Конец

¾ меню в виде блока данных в столбик - вертикальное меню или в строчку - горизонтальное меню или комбинации этих двух видов меню, например,

вертикальное меню: горизонтальное меню:

 

Треугольник  
Круг   Сохранение Редактирование Выполнение
Квадрат  
Выход  

 

комбинированное меню:

 

Файл Правка Формат Справка
Открыть Вырезать Шрифт  
Закрыть Копировать Абзац  
Сохранить Вставить    
Выход      

 

¾ меню в виде пиктограмм, иконок или значков.

Задача.В дальнейшем представим простейший алгоритм построения вертикального меню. Данный алгоритм строит меню из трех пунктов:

Данные
Справка
Выход

Движение по этому меню выполняется с помощью стрелок вверх ↑ или вниз ↓. Выполнение каждого пункта меню осуществляется при нажатии клавиши Ввод на выбранном пункте меню.

Uses CRT,DOS;

Var SPISOK:array[1..3] of string[7];

kod,kod1 : char;

n,i,p : byte;

{процедура регулирования размера курсора}

Procedure CURS(size:word);

Var Regs : Registers;

begin

With Regs do

begin

AH:=$01;

CH:=Hi(size);

CL:=Lo(size);

Intr($10,Regs)

end

end;

{процедура вывода информации по выбранному пункту меню}

Procedure findd(n:byte);

begin

Textmode(3);

Window(1,1,80,25);

TextBackGround(Black);

ClrScr;

case n of {анализ номера выбранного пункта меню}

1: begin {вывод информации для пункта 1} end;

2: begin {вывод информации для пункта 2} end;

3: exit

end;

readln;

Curs($0607) {восстановить стандартный размер курсора}

end;

{процедура оформления меню и обработки нажатой клавиши}

Procedure oformenu;

begin

p:=1; i:=1;

Repeat {построение пунктов меню}

if i=n then

begin TextBackGround(Blue); Textcolor(LightGray); end

else

begin TextBackGround(Lightgray); Textcolor(Blue); end;

gotoxy(1,i);

writeln(SPISOK[i]); {вывод текста пунктов меню}

inc(i); inc(p)

until p>3;

kod:=ReadKey;

CASE kod of

#13: begin { обработка клавиши Ввод}

findd(n);

exit

end;

#0: begin

kod1:=ReadKey; {обработка нажатия клавиш ↑, ↓}

Case kod1 of

#72: if n>1 then dec(n)

else n:=3;

#80: if n<3 then inc(n)

else n:=1;

end;

oformenu; {рекурсивный вызов процедуры}

end

else oformenu

end;

end;

BEGIN{основная программа}

SPISOK[1]:='Данные ';

SPISOK[2]:='Справка';

SPISOK[3]:=' Выход ';

TextBackGround(Black); {установка цвета фона}

Textcolor(Lightgray); {установка цвета шрифта}

ClrScr; {очистка окна}

Window(35,10,43,13); {задание окна для меню}

n:=1; {указатель номера выбранного пункта меню}

Curs($2000); {удаление изображения курсора}

oformenu; {вызов процедуры оформления меню}