Are you not able to use keydown in this fashion?

Set a variable to indicate which arrow went do and reset on keyup.

MyKey = key


That way in your time loop you respond say every 75 ms if the arrow key is still down.

Code:
if TimeGetTime > TimeToRespondgagain then
  begin
  if MyKey = vk_left then do_my_stuff;
  TimeToRespondgagain := TimeGetTime + 75;

  end;

The arrow keys are not sent as a message to the keypress method