Смотрел.
я тут свою функцию написал
Код
function menu (s:Tstrmenu; n,vp:byte):byte;
const
bc = lightgray;
tc = black;
vbc= green;
b = blue;
ent = #13;
esc = #27;
up = #72;
down = #80;
left = #75;
right= #77;
var i, c, len: byte;
ch: char;
begin
{ textbackground(b);
clrscr;}
window(1,1,80,1);
textcolor(tc);
textbackground(bc);
clrscr;
len:=trunc(80/n);
c:=vp;
repeat
for i:=1 to n do
begin
if i=c then textbackground(vbc) else textbackground(bc);
window(i*len-len+1,1,i*len,1);
clrscr;
gotoxy(trunc(len/2)-(trunc(length(s[i])/2)),1);{vyvod po centru}
write(s[i]);
end;
ch:=readkey;
case ch of
up : c:=1;
down : c:=n;
left : begin
c:=c-1;
if c=0 then c:=n;
end;
right: begin
c:=c+1;
if c=n+1 then c:=1;
end;
end;
until (ch=ent) or (ch=esc) or (ch=#32);
end;
но почему-то для выбора пункта надо нажать enter два раза
не пойму почему