![](/logo_grey.gif)
Последние записи
- Сравнение языков на массивах. Часть 2
- wprintf как напечатать кириллицу
- Взаимодействие через командную строку
- Сравнение языков на массивах. Часть 1
- Сравнение языков по скорости
- Чтение огромных xml-файлов
- Как в Python+Selenium webdriver открыть новую вкладку в уже открытом браузере?
- Lazarus, проверка существования строки таблице
- BASM и record, обращение к полям записи
- Web PHP Framework Symfony
![](http://programmersclub.ru/slurm3.jpg)
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
![](http://programmersclub.ru/katajpg.jpg)
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
27th
Авг
Меню из процедур. Листать стрелками
Posted by obzor under Delphi
Напишите пожалуйста небольшой пример вертикального меню из процедур, которые можно листать стрелками на клавиатуре. То есть даны две или больше процедур, нужно сделать так ,чтобы они были в начальном меню на выбор для выполнения, и их можно было листать, после чего на Enter активировать.
Сделал так:
uses crt;
const Menu: array[0..3] of string=('Exit','Func 1','Func 2','Func 3');
const Arrow: string=' <--';
var CurrChoice:integer;
procedure DrawArrow(n:integer; draw:boolean);
var i:integer;
begin
gotoxy(Length(Menu[n])+1, n+1);
if draw then
begin
write(Arrow);
CurrChoice:=n;
end
else
begin
write(' ':Length(Arrow));
end;
end;
procedure InitMenu(n:integer);
var i:integer;
begin
ClrScr;
cursoroff;
for i:=0 to High(Menu) do
writeln(Menu[ i]);
if (n < 0) or (n > High(Menu)) then n:=0;
DrawArrow(n,true);
end;
procedure DeinitMenu;
begin
cursoron;
ClrScr;
end;
procedure Change(n:integer);
begin
if (n >= 0) and (n <= High(Menu)) then
begin
DrawArrow(CurrChoice,false);
DrawArrow(n,true);
end;
end;
function ShowMenu(n:integer):integer;
var ch:char;
begin
InitMenu(n);
repeat
ch:=ReadKey;
if ch = #0 then
begin
ch:=ReadKey;
case ch of
#80: Change(CurrChoice+1);
#72: Change(CurrChoice-1);
end;
end;
until ch=#13;
DeinitMenu;
result:=CurrChoice;
end;
procedure func1;
begin
writeln('func1');
writeln('Press any key');
readkey;
end;
procedure func2;
begin
writeln('func2');
writeln('Press any key');
readkey;
end;
procedure func3;
begin
writeln('func3');
writeln('Press any key');
readkey;
end;
var n:integer;
begin
n:=1;
repeat
n := ShowMenu(n);
case n of
1: func1;
2: func2;
3: func3;
end;
until n=0;
writeln('Exit');
writeln('Press any key');
readkey;
end.
Думаю, что тут все понятно должно быть.
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
![пеллетные котлы](http://programmersclub.ru/respective.jpg)
пеллетные котлы
![пеллетный котел](http://programmersclub.ru/emtas.jpg)
Пеллетный котел Emtas
![форум программистов](http://programmersclub.ru/banf336х280.gif)
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)