Its because menuchoice variable is declared in TMain.FormKeyUp event.
Each time this event is called menuchoice is set to 1. If down arrow is pressed then menuchoice is 2, if up arrow then menuchoice equals 3. If any other key except ESC is pressed then menuchoice still equals 1. Also note that condition
Code:
 if menuchoice = 3 then ...
is never reached.

To fix it declare menuchoice as global or as a field of TMain Form nad set it
to zero during TMain.OnCreate event (or any other initialisation procedure you use). Your TMain.OnKeyUp event will look something like this:

Code:
procedure TMain.FormKeyUp(Sender: TObject; var Key: Word; 
  Shift: TShiftState); 

begin 


 if key = vk_escape then begin 
  Exit.ShowModal; 
  if Exitg = 1 then close;
 end; 

 
// no if's just modulo divisions
  if key = vk_up then 
    MenuChoice := (MenuChoice - 1) mod 3; 
  if key = vk_down then begin
    MenuChoice := (MenuChoice + 1) mod 3;

  Case Menuchoice of 
                0 : begin                                                                   MenuImages.Items[4].Draw(DXDraw1.Surface,350,300,0); 
                          DXDraw1.Flip; 
                     end; 
                1 : begin MenuImages.Items[5].Draw(DXDraw1.Surface,350,360,0); 
                          DXDraw1.Flip;
                      end; 
                2 : begin MenuImages.Items[6].Draw(DXDraw1.Surface,350,410,0); 
                          DXDraw1.Flip;  
                      end; 
   end; 


end;
I also think that more natural would be to place this menu code in TMain.OnKeyDown event.

Edit: code correction.