[Back to MENU SWAG index] [Back to Main SWAG index] [Original]

    Program Menu; Uses Crt;

    Const
      MenuChoice : Array[1..3] of String[9] = ('Choice #1', 'Choice #2',
                                                'Choice #3');
      MenuPosX = 35;  MenuPosY = 10;
      NumberChoices = 3;

    Type
      keys = (ReturnKey,Up,Down,Escape);

    Var
      Key : keys;
      fk : Boolean;
      ch : Char;
      x, y, CurrentChoice : Integer;

    Procedure SetChoiceColor(back,Fore : Integer);
    begin
      TextBackGround(back);
      TextColor(Fore);
    end;

    Procedure GetKey;
    begin
      fk := False;
      ch := ReadKey;
      if ch = #0 then
        begin
          fk := True;
          ch := ReadKey;
        end;
      if fk then
        begin
          Case ord(ch) of
            72 : key := Up;
            80 : key := Down;
          end; end;
          if not fk then
            begin
              Case ord(ch) of
                13 : key := ReturnKey;
                27 : key := Escape;
              end;
            end;
        end;

    begin
      SetChoiceColor(7,0);                  {.. reverse vid black on white }
      For x := 1 to NumberChoices do
        begin                               {.. Write menu options }
          GotoXY(MenuPosX,MenuPosY+x-1);
          if x > 1 then SetChoiceColor(0,7);  {..turn reverse off after }
            Write(MenuChoice[x]);               {  first option written   }
        end;
      GotoXY(MenuPosX,MenuPosY);            {..position curosr on 1st option }
      CurrentChoice := 1;

      Repeat
        GetKey;                               {..wait For a key to be pressed }
        SetChoiceColor(0,7);                  {..reverse vid white on black }
        Write(MenuChoice[CurrentChoice]);     {..un-highlight current option }

        Case key of
          Up   : if CurrentChoice > 1 then dec(CurrentChoice)
                   else CurrentChoice := NumberChoices;
          Down : if CurrentChoice < 3 then inc(CurrentChoice)
                   else CurrentChoice := 1;
          end;

        SetChoiceColor(7,0);                        {..reverse vid black/white }
        GotoXY(MenuPosX,MenuPosY+CurrentChoice-1);
        Write(MenuChoice[CurrentChoice]);           {..highlight new option }
        GotoXY(MenuPosX,MenuPosY+CurrentChoice-1);
        Until (Key = ReturnKey) or (Key = Escape);

        SetChoiceColor(0,7);

        Case CurrentChoice of
          1 : Writeln('Helloo 1');
        end;

    end.

[Back to MENU SWAG index] [Back to Main SWAG index] [Original]