Не получается меню - Free Pascal
Формулировка задачи:
Бодрого дня, господа.
Ни как не могу сваять свое меню.
Я понимаю. Образцов кругом хоть пруд пруди. Но...
Везде образцы рассчитаны на то, что будет только одно меню.
Типичный пример:
или
т. е. применяется массив с конкретным количеством пунктов, заданном константой.
В моем случае все чуток по другому. Мне необходимо 4 меню. В каждом разное количество пунктов. И сами пункты, разумеется, разные.
Пробовал применять динамичный массив - не катит.
m:array[1..5] of string=('Имя файла ',
'Создать ',
'Посмотреть ',
'Редактировать',
'Выход ');const
N=4;
var
menu:array[1..N] of string[20];Решение задачи: «Не получается меню»
textual
Листинг программы
{$mode objfpc}
uses Crt;
function Menu(const items : array of string) : integer;
var
i : integer;
kod : char;
begin
result := 0;
repeat
TextAttr := 16 * Black + LightGray;
clrscr;
for i := 0 to High(items) do
begin
if i = result then TextAttr := 16 * LightGray + Black
else TextAttr := 16 * Black + LightGray;
writeln(items[i]:20);
end;
kod := readkey;
case kod of
#0:
case readkey of
#72:
begin
dec(result);
if result < 0 then result := high(items);
end;
#80:
result := succ(result) mod length(items);
end;
end;
until kod=#13;
inc(result);
end;
var
b_main, b_sub : boolean;
begin
b_main := false;
repeat
case Menu(['main 1', 'main 2', 'main 3', 'main 4', 'exit']) of
1: repeat
b_sub := false;
case Menu(['sub1_1', 'sub1_2', 'sub1_3', 'exit']) of
1 : writeln('1_1');
2 : writeln('1_2');
3 : writeln('1_3');
4 : b_sub := true;
end;
until b_sub;
2: repeat
b_sub := false;
case Menu(['sub2_1', 'sub2_2', 'exit']) of
1 : writeln('2_1');
2 : writeln('2_2');
3 : b_sub := true;
end;
until b_sub;
// ...
5: b_main := true;
end;
until b_main;
end.