{============================================================================} PROGRAM LightBar; uses Crt; const UPARROW = #72; DNARROW = #80; PAGEUP = #73; PAGEDN = #81; HOMEKEY = #71; ENDKEY = #79; ENTER = #13; NUMITEMS = 4; StrLen = 14; ListArray : array[1..NUMITEMS] of string[StrLen] = ('Apples', 'Oranges', 'Bananas', 'Cumquats'); var Ch: char; CurrPos, OldPos: byte; PROCEDURE InitMenuBox(x,y: byte); var I: byte; begin Window(x,y,x+StrLen,y+NUMITEMS-1); TextAttr := $70; ClrScr; for I := 1 to NUMITEMS do begin GotoXY(1,I); Write(' ',ListArray[I]); end; CurrPos := 1; end; PROCEDURE GetKey(var Ch: char); begin Ch := UpCase(ReadKey); if Ch = #0 then Ch := UpCase(ReadKey); end; PROCEDURE WriteString(Place,Attr: byte); begin GotoXY(1,Place); TextAttr := Attr; ClrEol; Write(' ',ListArray[Place]); end; BEGIN InitMenuBox(10,3); repeat OldPos := CurrPos; WriteString(CurrPos,$30); GetKey(Ch); case Ch of UPARROW: if CurrPos > 1 then Dec(CurrPos) else CurrPos := NUMITEMS; DNARROW: if CurrPos < NUMITEMS then Inc(CurrPos) else CurrPos := 1; PAGEUP : CurrPos := 1; PAGEDN : CurrPos := NUMITEMS; HOMEKEY: CurrPos := 1; ENDKEY : CurrPos := NUMITEMS; ENTER : case CurrPos of 1: {Apples}; 2: {Oranges}; 3: {Bananas}; 4: {Cumquats}; end; else ; end; WriteString(OldPos,$70); until Ch = #27; Window(1,1,80,25); TextAttr := $07; ClrScr; END. {============================================================================}