RE:Como hago movimientos del cursor con las flecha
Hurricane.
Hay problemas con tu código, en la parte que devuelve el valor de la tecla presionada, en esta línea:
If (K=0) then K := Ord(ReadKey)*256;
¿Por qué multiplicas por 256?.
Por ejemplo si presiono la tecla flecha abajo resulta que ReadKey devuelva el valor 80, multiplicado por 256 me da 20480, el cual es un valor lícito para el tipo Word, pero en el cuerpo del programa, en esta línea:
Until (Key in [KEY_LEFT, KEY_UP, KEY_DOWN, KEY_RIGHT, KEY_EXIT]);
Se produce un error en tiempo de ejecución por valor fuera de rango, este error se debe a que el tipo conjunto solo puede almacenar 256 valores al mismo tiempo, 20480 es más que evidente que está fuera de ese rango.
La multiplicación de arriba es lo que me pareció sospechosa de tu programa, así que supuse que te aprovechabas del desbordamiento de la variable K para restar el valor de las teclas especiales y obtener alguno de los valores de las constantes declaradas, pero no funciona, aún deshabilitando el control de rangos en el compilador.
Entiendo la idea detrás de usar una formula para mover el valor devuelto por las teclas especiales, se trata de llevar ese valor a uno que no corresponda a ninguna tecla normal, me parece una idea brillante aunque esté mal implementada.
Entonces, para solucionar el problema hice algunos cambios.
Primero cambiar la formula para calcular el valor de la tecla por esta:
If (K=0) then K := Ord(ReadKey)-61;
Cambiar el tipo de las variables K y Key de Word a Byte para que estén contempladas dentro del conjunto ad-hoc en la condición del Until del cuerpo principal, también cambiar el tipo devuelto por la función wReadkey de Word a Byte.
Y cambiar los valores de las constantes para que se ajusten a los valores esperados en la formula, las cuales quedan así:
Const
KEY_LEFT = 14;
KEY_UP=11;
KEY_DOWN=19;
KEY_RIGHT=16;
Entonces sí me funciona sin problemas :).
¿Por qué resto 61?, porque el menor valor devuelto por las teclas de cursor es cursor arriba, 72. 72-61=11, y 11 no corresponde a ninguna tecla normal, así como tampoco 14, 16 y 19. De otra forma interferiría con otras teclas normales, por ejemplo si restara 71, al presionar la tecla cursor abajo devolvería 80, menos 71 igual 9, pero 9 es la tecla TAB que no es una tecla especial.
Espero haber sido claro en mi explicación y solución.