Hola.
Como te explica claramente Casimiro en el ejemplo, no son strings que se puedan mostrar directamente, son de tipo ordinal. Cada nombre definido (cArriba, cAbajo, cIzquierda, cDerecha) tiene una órdinalidad que comienza desde cero y termina en el enésimo término.
Para mostrar el valor de un tipo ordinal debés hacer:
Código Delphi
[-]
begin
ShowMessage(IntToStr(Ord(cDerecha))); end;
Para realizar la operación inversa, es decir, dado el órden obtener el nombre, se puede usar la función
GetEnumName:
Código Delphi
[-]
uses TypInfo;
...
begin
ShowMessage(GetEnumName(TypeInfo(TPosicion), 2)); end;
Un saludo.