{
ROBERT ROTHENBURG

>I have created a Menu Bar, Now I think key #77 is left and key #77 is
>assigned to "M" or one of them. But anyway so when someone pushes the
>"M" key the menu bar moves. So how can I stop this, I only want it to
>use the arrow keys and a few letters but not "M".

You guessed it: USE BIOS CALLS!
}

Program ShowCodes; {* This Program will output the keyboard
                   {* scan codes.  Use the Function "ScanCode"
                   {* in your Program once you know the codes
                   {* For each keypress *}
Uses
  Crt, Dos;

Function Byte2Hex(numb : Byte): String;       { Converts Byte to hex String }
Const
  HexChars : Array[0..15] of Char = '0123456789ABCDEF';
begin
  Byte2Hex[0] := #2;
  Byte2Hex[1] := HexChars[numb shr  4];
  Byte2Hex[2] := HexChars[numb and 15];
end; { Byte2Hex }

Function Numb2Hex(numb : Word): String;        { Converts Word to hex String.}
begin
  Numb2Hex := Byte2Hex(hi(numb)) + Byte2Hex(lo(numb));
end; { Numb2Hex }

Function ScanCode : Word;
Var
  reg : Registers;    {* You need the Dos Unit For this! *}
begin
  reg.AH := $10;      {* This should WAIT For a keystroke.  If
                      {* you'd like to POLL For a keystroke and
                      {* have your Program do other stuff While
                      {* "waiting" For a key-stroke change to
                      {* reg.AH:=$11 instead... *}
  intr($16, reg);
  ScanCode := reg.AX  {* The high-Byte is the "scan code" *}
end;                  {* The low-Byte is the ASCII Character *}

begin
  Repeat
    Writeln(Numb2Hex(ScanCode) : 6)
  Until False;        {* You'll have to reboot after running this <g>*}
end.

{
I "think" the arrow-key scan codes are:

   $4800 = Up Arrow
   $5000 = Down Arrow
   $4B00 = Left Arrow
   $4D00 = Right Arrow
}
