Spanish Key_Press

Hola a todos, estoy tratando de hacer un programa que al oprimir la tecla de volumen arriba me cuente un número en un edit y al apretar abajo me reste uno del edit (estoy diseñando una aplicación para ayudar con los gastos y entre las herramientas aparte de una calculadora esta este apartado para ir contando manualmente monedas sueltas), todo esta hecho pero tengo un enorme bug:

Si dejo apretada la tecla arriba empieza a sumar número tras número rápidamente (de forma consecutiva obviamente) hasta que suelto, y a la inversa con la tecla abajo.

1.- ¿Hay alguna manera de bloquear la tecla para que solo cuente un numero sin importar el tiempo que se deje oprimido el botón?, es decir, aunque lo deje oprimido sólo añadirá o quitara un número y no lo hará de nuevo hasta que suelte la tecla y la vuelva a oprimir.

2.- ¿Hay forma de que si pulso la tecla y la dejo pulsada por ejemplo, 5 segundos, haga que prenda el led y suene un beep hasta que suelte el botón? (Una especie de aviso que se esta dejando apretado).

De antemano gracias por la respuesta, realmente ya me tiene loca esto, son las únicas dos cosas que me faltan para finalizar mi programa. He leído el foro de arriba a abajo y la documentación sobre key_press y no he encontrado nada, agradecería mucho la ayuda.

Besos!!
 

JordiCP

Expert
Licensed User
Longtime User
Buenas,

Has probado con Activity_KeyUp?

Cada vez que tienes tu evento en Activity_KeyPress, activas un flag de que hay alguna tecla pulsada. Cada vez que se recibe el Activity_KeyUp, se limpia el flag. Se puede hacer en general (alguna tecla pulsada o ninguna) o para cada tecla, según tu código

Algo parecido a (no probado)

B4X:
Sub Globals
  Dim UltimaTecla as int =0
End Sub
Sub Actvity_KeyPress (KeyCode As Int) As Boolean
  if UltimaTecla=0 then
      '... aquí haces tu proceso según la tecla
  end f
  UltimaTecla=KeyCode
End Sub

Sub Activity_KeyUp (KeyCode As Int) As Boolean
   UltimaTecla=0
End Sub
 

Pablo Navarro

New Member
Alexandra, lo que dice JordiCP funciona a la perfección para tu primer pregunta, tomas la tecla que te regresa y después ultimatecla pasa a ser el valor numérico de ella (la que oprimiste), si allí pones un if ultimatecla = 25 (por ejemplo), puedes meter allí tu timer y tu código de conteo (con variables obviamente), con eso ya tienes lo que te falta.

Lo que a mi si me queda en duda @JordiCP es que sucederá:

A) en caso de oprimir ambas teclas juntas, y

B) si además tienes el bloqueo en tecla arriba y esta con el beep, al presionar tecla abajo se liberara este (el beep y la acción de la tecla o el reconocimiento de que esta oprimida) ya que pasa la acción a la última tecla oprimida y la primera ya no se reconoce hasta que se suelta y se oprime nuevamente, allí la segunda tecla se libera (de nuevo hablamos del beep y el reconocimiento del sistema de que la tecla esta oprimida) y así sucesivamente.

En ambos escenarios, ¿que solución se le puede dar?
 
Top