Программа примера №18 продемонстрирует нам реализацию меню средствами моделя Crt.
Реализация меню подразумевает следующие этапы:
— отображение меню на экране;
— установка одного из пунктов в активное состояние;
— ожидание нажатия клавиш;
— анализ нажатой клавиши (если стрелки – изменение активного пункта, если Enter – выполнение активного пункта).
Пример 18
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
{ Программа реализует работу меню } 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. |