![]() |
Problema con onkeyPress...ayuda por favor
Hola a todos,
Estoy haciendo un componente que hereda del TEdit. He redefinido su evento OnKeyPress de tal forma que al final del mismo hago un:
El problema es que siempre me pone lo que yo quiero en el edit pero siempre queda como primer caracter del edit la tecla que he pulsado en último lugar. Es decir, si por ejemplo escribo: 1234 en el edit me aparece 41234 Supongo que será debido a que por otro lado está escribiendo por el mensaje de windows en el onkeydown ó algo así... Que solución fácil y rápida se os ocurre?? Un saludo. |
|
Funciona perfecto poniendo lo que me dijiste al final del OnKeypress Seone, muchas gracias.
Una pregunta más, me gustaría saber el porqué de lo que me pasaba...si no es mucho pedir y alguien me lo puede explicar se lo agradecería. Un saludo. |
La explicación es sencilla, aunque tu le asignaras un valor al edit en el evento OnKeypress, todavía no había llegado la pulsación al edit, así después de terminar el evento llegaba y como el cursor debía de estar al principio del texto de ahí que se añadiera al principio. Por eso el evento OnKeyPress pasa como var el valor key, de esta manera podemos cambiar su valor por otro, pudiendo cambiar una tecla por otra, pero cuando se sustituye por un cero es como si anuláramos la tecla.
Espero haberme explicado, porque me parece que al final me lié un poco :p |
Te has explicado bien :)
Lo qe comentas es lo que me imaginaba, pero mi pregunta no era esa exactamente. Yo he redefinido el evento OnKeypress y le he quitado el inherited, por tanto (como yo creía aunque veo que estoy equivocado), no debería poner en el edit nada. Es decir quien realmente escribe en el edit no es el evento OnKeyPress del TEdit si no algún otro evento ya que si yo anulo ese me sigue escribiendo a no ser que le meta el #0. PD: Yo sí que me he explicado mal... |
La explicacion esta en la implementacion de la clase TWinControl de la que desciende el TEdit. Cuando recibe el mensage WM_CHAR, se ejecuta lo siguiente:
Como ves, si no se pone el valor de key a cero, el resultado de la función DoKeyPress es FALSE, por lo que es delphi quien llama a inherited. Poniendo key a cero evitamos que eso pase. |
La franja horaria es GMT +2. Ahora son las 13:05:14. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi