фото

Программа примера №18 продемонстрирует нам реализацию меню средствами моделя Crt.

Реализация меню подразумевает следующие этапы:
— отображение меню на экране;
— установка одного из пунктов в активное состояние;
— ожидание нажатия клавиш;
— анализ нажатой клавиши (если стрелки – изменение активного пункта, если Enter – выполнение активного пункта).

Пример 18

pascal
{ Программа реализует работу меню }
uses Crt;
const               { описание названий пунктов меню }
  Items : array [0..2] of string =
          (' Пункт 1 ',' Пункт 2 ',' Пункт 3 ');
var
  xpos,ypos,curPos,i: integer;
  Key: char;
  NormCol,SelCol,StatCol:byte;
BEGIN
ClrScr;             { установка начальных значений }
NormCol:=$71;       { значения переменных указаны в }
SelCol:=$8F;        { шестнадцатеричной системе счисления}
StatCol:=$0F;
xpos:=10;
ypos:=10;
TextAttr:=NormCol;
for i:=0 to 2 do    { вывод списка меню }
 begin
   GotoXY(xpos,ypos+i);
   write(Items[i]);
 end;
TextAttr:=SelCol;   { выделение 1-го пункта меню }
GotoXY(xpos,ypos);
write(Items[1]);

repeat              { реакция на нажатие клавиш }
   Key:=readkey;
   if Key=chr(0) then
      key:=readkey;
   TextAttr:=StatCol;
   GotoXY(2,24);
   ClrEol;
   TextAttr:=NormCol;
   GotoXY(xpos,ypos+CurPos);
   write(Items[CurPos]);
   case ord(key) of
      72:if CurPos>0 then  { изменение номера текущего }
            dec(curPos);   {  пункта меню }
      80:if CurPos<2 then
            inc(curPos);
      13:begin               { выбор пункта меню }
           TextAttr:=StatCol;
           GotoXY(2,24);
           Sound(300);
           Delay(100);
           NoSound;
           write('Выбран ',Items[CurPos]);
         end
   end;
   TextAttr:=SelCol;
   GotoXY(xpos,ypos+CurPos);
   write(Items[CurPos]);
until key=#27;
TextAttr:=$0F;      { установка первоначальных параметров }
ClrScr;
END.