Esto es INCORRECTO. Las teclas de cursor no envían un caracter, sino DOS caracteres el primero es siempre cero, el segundo es el caracter que la identifica. El programa de ricardo no funciona como se espera. Aquí están las modificaciones necesarias.
uses crt;
var
flecha: char; {la variable flecha debe ser de tipo char}
begin
Repeat { repetir... }
writeln('digite una flecha: ');
flecha:= readkey; { toma el primer caracter... }
if Flecha = #0 then { si es el cero... }
begin
Flecha:= Readkey; {... tomo el segundo }
case flecha of
#72 : writeln('presionó flecha arriba'); {Cursor Arriba }
#75 : writeln('presionó flecha izquierda'); {Cursor a la izquierda }
#77 : writeln('presionó flecha derecha'); {Cursor a la derecha }
#80 : writeln('presionó flecha abajo'); {Cursor hacia abajo }
end; { case }
end; { if }
Until Flecha = #27; { ...hasta presionar Escape }
end.