Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

исходник "меню" на Паскале

Sadovnik Мастер (1014), закрыт 15 лет назад
Народ , плз , дайте исходник программы на паскале.
надо :
меню как в играх , тоесть есть несколько пунктов в ряд , нажимаешь стрелку "вниз" переходит подсветка на нижний пункт , "вверх" - на верхний пункт и тд и тп

хотя бы просто процедуру

Зарание спасибо !
Лучший ответ
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.

Удачи!
Остальные ответы
Вован дэ'Морт Искусственный Интеллект (348061) 15 лет назад
да тут несколько вариантов разработки.... 1 графический с использованием библиотеки graph, текстовое и turbo vision
Похожие вопросы