Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Не получается с меню

Автор: camac 8.05.2016 20:58

Бодрого дня, господа.
Ни как не могу разобраться с проблемкой. Мне в программулине необходимо 4 разных меню:
- в первых 2-х 2 пункта;
- в 3-м 8;
- и в 4-м 6.
Разумеется пункты этих меню разные.
Первоначально вызывается первое. После выбора нужного пункта что-то там делается.
Затем вызывается второе... И т. д.

Я понимаю, что это должна быть функция или процедура. Но как, черт ее побери, это все сваять?

Автор: Федосеев Павел 9.05.2016 1:41

Нужно определится с типом списка пунктов.
Потом с перечнем кнопок (стрелки, enter, esc).

Пусть типом списка пунктов будет массив строк.


const
MenuItems1 : array [0..3] of string = (
'Menu 1 Item 0',
'Menu 1 Item 1',
'Menu 1 Item 2',
'Menu 1 Item 3'
);
MenuItems2 : array [1..1] of string = (
'Menu 2 Item 0',
'Menu 2 Item 1'
);
................

Потом написать функцию, которая возвращает номер выбранного пункта меню. Возьму за образец ту, что дал volvo.
function Menu(const items : array of string) : integer;
begin
result := 0; - это номер выбранного пункта меню
в цикле выполнять
вывод построчно всех строк из списка пунктов с одним цветом для неактивных и другим - для выбранного
опрос клавиш
стрелка вверх: result:=result-1 активным становится предыдущий пункт
стрелка вниз: result:=result+1 активным становится следующий пункт
enter: прервать цикл
перейти в начало цикла
inc(result);
Menu:=result - в современных компиляторах можно без этой строки.
end;

Потом в программе обращаться

repeat
case Menu(MenuItems1) of
1: case Menu(MenuItems2) of
1: .........
2: .........
3: .........
end;
2: case Menu(MenuItems3) of
1: .........
2: .........
end;
3: case Menu(MenuItems4) of
1: .........
2: .........
3: .........
4: .........
end;
4: break;
end;
until false;


Вроде всё просто.

Автор: camac 10.05.2016 16:05

Спасибо. Почти то, что надо. Остальное я уже сам подправлю.