Pascal/Turbo Pascal - Duda con KeyPressed

 
Vista:

Duda con KeyPressed

Publicado por Julio (12 intervenciones) el 14/09/2004 19:51:38
Hola a todos.

Por favor, alguien me puede decir cómo puedo usar el KeyPressed para poder repetir un ciclo hasta que se pulse una tecla.

Lo he intentado, pero cuando el programa entra de nuevo al ciclo KeyPressed se comporta como si ya se hubiese presionado la tecla y no entra al ciclo. En pocas palabras puedo restablecer el valor de KeyPressed.

De antemano, muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Duda con KeyPressed

Publicado por Roberto Garcia Garcia (41 intervenciones) el 15/09/2004 06:29:26
Porque no pruebas usando un readkey, asignadolo a una variable.

Por ejemplo despues del ciclo donde usas el keypressed haces lo siguiente

w:=readkey;

donde w es de tipo char
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Duda con KeyPressed

Publicado por Diego Romero (786 intervenciones) el 15/09/2004 11:14:28
Para que quede más claro.
KeyPressed devuelve True si hay un caracter en el buffer de teclado pero NO se detiene a esperarlo. Un ejemplo.
Repeat
{ hacer cualquier cosa }
until KeyPressed;
Este ciclo se repite hasta que se presione cualquier tecla que genere un caracter, pero insisto NO se detiene a esperar por una tecla, cosa que sí hace ReadKey devolviendo el caracter correspondiente. Otro ejemplo:
Repeat
{ hacer cualquier cosa }
until KeyPressed;
A:=ReadKey;
WriteLn('Usted salió al haber presionado la tecla: ', A);
Lo que sucede aquí es que el ciclo se ejecuta, KeyPressed verifica si hay un caracter en el buffer, sino lo hay el ciclo se repite, si lo hay, KeyPressed devuelve true y el ciclo termina.
Se ejecuta ReadKey el cual extrae la tecla del buffer y almacena su valor en A (que debe ser de tipo Char).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Duda con KeyPressed

Publicado por Ge-ergon (17 intervenciones) el 15/09/2004 18:31:05
Hola!
Si estas programado bajo DOS puedes
usar la función para limpiar el buffer y llamarla despues del keypressed

procedure Clear_KeyBoard_Buffer; assembler;
asm
mov ax,0C06h
mov dl,0h
int 21h
end;

Esta es otra opcion que puedes probar:

repeat
{tu codigo}
until keypressed;
while keypressed do readkey;

Gracias por su tiempo
Att:Ge-ergon
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Duda con KeyPressed

Publicado por Ge-ergon (17 intervenciones) el 18/09/2004 08:03:09
Hola!
Aqui te paso otra rutina para limpiar el buffer del teclado
utilizando funciones del BIOS.

procedure ClearKeyBuf;assembler;
label ciclo,fin;
asm
ciclo: mov ah,$11
int 16h
jz fin
mov ah,$10
int 16h
jmp ciclo
fin:
end;

Att:Ge-ergon
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Duda con KeyPressed

Publicado por Julio (12 intervenciones) el 20/09/2004 18:53:09
Hola a todos.

Probé el procedimiento enviado por [email protected] y funciona perfectamente, aunque no logro entender el código, ya que está en asembler. Les agradecería que alguien me lo explicara si no es demasiado pedir.

Finalmente, por lo que veo no es posible limpiar reiniciar KeyPressed si recurrir a la utilización de un procedimiento. Ojalá que en versiones posteriores venga implementado esto.

Sin otro particular, se despide muy agradecido de todos Uds.

Julio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Duda con KeyPressed

Publicado por Diego Romero (786 intervenciones) el 21/09/2004 13:04:59
Me temo que eso no será posible. Turbo Pascal hace 14 años que no se actualiza y Borland no volverá a dedicarle tiempo a un producto obsoleto para un sistema operativo obsoleto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Duda con KeyPressed

Publicado por ge-ergon (17 intervenciones) el 22/09/2004 20:47:30
Hola!
En realidad es muy sencillo:
El procedimiento en pseucodigo sería:

procedure limpiar_ buffer_ teclado;
begin
while exista_tecla_en_buffer then remover_tecla
end;

Puedes buscar información sobre las funciones del BIOS para
el teclado en:
http://www.ctyme.com/intr/int-16.htm

Aqui te comento el código:

procedure ClearKeyBuf;assembler;
label ciclo,fin; { se declaran etiquetas}
asm
ciclo: mov ah,$11 { parametro 11 para indicar si se preciono una tecla}
int 16h {llama a la funcion que usa parametro 11 en ah}
jz fin {si no existe tecla en buffer goto fin}
mov ah,$10 {parametro 10 para leer tecla y descargarla del buffer}
int 16h {llama funcion que usa parametro 10 en ah}
jmp ciclo {goto ciclo}
fin:
end;

Email:[email protected]
Att:Ge-ergon
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar