Gennady
Гений
(60627)
15 лет назад
Доброго времени суток.
Вот программа с меню для ТР 7.0. Возьмите отсюда все, что нужно.
program Menu;
uses Crt;
type
FrameChar = array[1..8] of Char;
const
MaxFrames = 2;
Frames : array[1..MaxFrames] of FrameChar = ('┌─┐││└─┘','╔═╗║║╚═╝');
MaxItem = 4;
Items : array[1..MaxItem] of String =
('Первая','Вторая','Третья','Четвертая');
BlankStr = ' ';
DefaultBk = Blue;
SelectedBk = Magenta;
kbEsc = 27;
kbEnter = 13;
kbUp = 72;
kbDn = 80;
var
i, X, Y, Res : Integer;
MaxLen : Integer;
S : String;
CurrSel : Integer;
function GetKey: Byte;
var
ch : Char;
begin
repeat until KeyPressed;
ch := ReadKey;
if ch = #0 then ch := ReadKey;
GetKey := Ord(ch);
end;
procedure DrawBox(H,W,X,Y : Integer);
var
i, j : Integer;
begin
TextBackGround(DefaultBk);
for i:= 0 to H+1 do begin
GoToXY(X-2,Y+i);
if (i = 0) or (i = H+1) then begin
if i = 0 then begin
S := Frames[1,1];
for j:=2 to W-1 do S := S+Frames[1,2];
S := S+Frames[1,3];
end
else begin
S := Frames[1,6];
for j:=2 to W-1 do S := S+Frames[1,7];
S := S+Frames[1,8];
end;
end
else begin
S := Frames[1,4];
for j:=2 to W-1 do S := S+' ';
S := S+Frames[1,5];
end;
WriteLn(S);
end;
end;
procedure DrawMenu(Selected, X, Y: Integer);
var
i, j : Integer;
begin
for i:=1 to MaxItem do begin
if i = Selected then TextBackGround(SelectedBk)
else TextBackGround(DefaultBk);
GoToXY(X,Y+i);
S := Items[ i ]+Copy(BlankStr,1,MaxLen-Length(Items[ i ]));
WriteLn(S);
end;
end;
begin
X := 10;
Y := 4;
TextColor(14);
TextBackground(0);
ClrScr;
{ поиск максимальной длины строки }
MaxLen := 0;
for i:= 1 to MaxItem do begin
if MaxLen < Length(Items[ i ]) then MaxLen := Length(Items[ i ]);
end;
CurrSel := 1;
DrawBox(MaxItem,MaxLen+4,X,Y);
DrawMenu(CurrSel,X,Y);
repeat
Res := GetKey;
case Res of
kbEnter : ;
kbDn : begin Inc(CurrSel); if CurrSel > MaxItem then CurrSel := 1; end;
kbUp : begin Dec(CurrSel); if CurrSel < 1 then CurrSel := MaxItem; end;
end;
DrawMenu(CurrSel,X,Y);
until (Res = 27) or (Res = 13);
end.
Реакцию на конкретный выбор элемента меню, сами пожалуйста. Хинт, используйте значение переменной CurrSel.
Удачи!
надо :
меню как в играх , тоесть есть несколько пунктов в ряд , нажимаешь стрелку "вниз" переходит подсветка на нижний пункт , "вверх" - на верхний пункт и тд и тп
хотя бы просто процедуру
Зарание спасибо !