TEdit - Readonly
Hola a tod@s:
Después de muchos años programando en Delphi 5, me he llevado una sorpresa sobre el funcionamiento del component TEdit. Para verlo mejor, inicia un nuevo proyecto y coloca dos componentes TEdit sobre un form. Al comopnente TEdit2 le asignamos la propiedad ReadIOnly a true. Ahora, en el evento OnExit del TEdit1 escribimos el siguiente código:
Ahora ejecutamos el programa. Hay dos modos de pasar de un TEdit a otro: tecla tab, o ratón. Si utilizamos la tercla tab, todo funciona según lo esperado. Sin embargo, si utilizamos el ratón, después de responder a ShowMessage, no podemos ecribir en TEdit2. ¿Alguna solución? |
Pero, ¿en qué evento pones ese código?
Ya lo he visto :) Pon el edit2.readonly:=false en el onenter del edit2 |
Cita:
|
Si en el OnExit del Edit1 pones el código que dices, por cierto Setfocus sobraría, te tiene que funcionar con el ratón y con la tecla TAb, por cierto acabo de hacer la prueba.
Revisa el código no tengas alguna cosa por ahí que no estés viendo. Un Saludo. |
Marcos, insisto en el error. E incluso se produce sin tener la propiedad ReadOnly a True.
Mi sospecha es que al hacer click sobre el segundo TEdit se activa la seleción de texto. Posteriormente se hace la llamada a ShowMessage y, a partir de ahí, todo se lía. |
Pues como no pongas todo el código fuente... porque adivinos ya no podemos ser :D
|
Cita:
Con la tecla tab funciona. El problema es cuando hago click con el ratón sobre TEdit2. ¡OJO! Para ver el fallo, hay que ejecutar el programa y probarlo con la tecla Tab, parar el programa (para resertear la propiedad ReadOnly de TEdit2 nuevamente a true), y volverlo a ejecutar y probarlo con el ratón.
|
Y cuando pulsas con el ratón en edit2 ¿está el foco en edit1?
|
Cita:
|
Ciertamente, tiene un comportamiento extraño.
|
Hola.
El comportamiento se produce al llamar una ventana de forma modal en el evento OnExit, ni la propiedad ReadOnly ni el método SetFocus tienen que ver en el asunto. Basta con hacer: para obtener el mismo resultado. Sin embargo, no sucede lo mismo si: En apariencia pasa cuando otra ventana acapara el foco... habrá que investigar un poco mas. Pero de momento sacando el ShowMessage, asunto solucionado. :) Saludos. |
Cita:
|
Curiosamente, con este código de prueba en el evento OnChange funciona si éste último se produce.
Un Saludo. |
También funciona saliendo con Enter, con KeyPreview activado y el siguiente código para habilitar Enter por Tab.
Es decir, funciona con teclas pero no con el ratón. Un Saludo. |
Ciertamente puse como ejemplo ShowMessage. En cualquier caso en la aplicación en desarrollo el problema se produce con el componente TMessageDialog de la librería RX. Evidentemente el problema es el mismo: una llamada a una ventana de forma modal.
Mañana haré pruebas en la oficina y os diré algo. Saludos y gracias a todos por vuestro interés. |
Cita:
|
Cita:
Un Saludo |
Cita:
Y creo que no estás para nada desorientado. Estuve pensando en lo que explicabas arriba, me parece que cuando se llama a una ventana modal en el evento OnExit, y se fuerza la pérdida del foco, el mouse se despista de donde debe liberar el boton presionado. Ese es el comportamiento extraño que nota José cuando dice: Cita:
Saludos. |
Hola.
De todos modos, aunque el código que te puse anteriormente soluciona la situación, no me parece buena idea llamar una ventana modal en el evento OnExit... :rolleyes: Saludos. |
Esta es la solución.
Muchas gracias. |
La franja horaria es GMT +2. Ahora son las 17:39:30. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi