FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Texto en celda del DBGrid antes del Post
Hola amigos,
Estoy tratando de validar que en uno de los campos de la grilla, el usuario ingrese un número dentro de un determinado rango. Probé transformando el campo a un IntegerField y luego seteando las propiedades MaxValue y MinValue pero el resultado no es muy bueno, es bastante molesto el cartelito que se muestra cuando el valor está fuera de rango. Me gustaría directamente no permitir al usuario ingresar un valor incorrecto, leyendo lo que escribió más la tecla actual, si ese valor es incorrecto, asignarle un #0 a la tecla en el evento OnKeyPress. El problema es que ninguna de las propiedades devuelve el valor que el usuario está tipeando en ese momento, ese valor lo tengo recién después que se hace el Post en el ClientDataSet. ¿Cómo recuperar el texto que el usuario está tipeando mientras lo tipea, antes de que pase a otra columna o fila?. Muchas gracias. |
#2
|
||||
|
||||
Quizás te sirvan los eventos OnValidate y OnChange del campo del ClientDataSet que quieres controlar.
EDIT: aquí hay un poco más de información sobre estos dos eventos http://www.clubdelphi.com/foros/show...ght=OnValidate En el Help de Delphi, más Última edición por __marcsc fecha: 15-06-2004 a las 23:23:09. |
#3
|
|||
|
|||
Buenisimo, mucho mejor validar en esos eventos.
Pero sera que ¿hay alguna manera de recuperar el valor del campo en el evento OnKeyPress del DBGrid?. O sea, el valor del campo antes de ir al buffer del registro actual, mientras el usuario lo está tipeando. Muchas gracias. |
#4
|
||||
|
||||
Puedes probar con la propiedad NewValue del TField, aunque siempre que he necesitado hacer lo que comentas, he usado la técnica de marc
__________________
E pur si muove |
#5
|
|||
|
|||
El valor de NewValue en el OnKeyPress es siempre nulo, luego cuando salgo del campo entonces se asigna el valor de lo que escribio el usuario a esa propiedad. O sea que si ya tiene algo, en el OnKeyPress siempre se devolvera lo que tenia de antes, sea nulo o algun valor.
Tambien probe con CurValue, OldValue, Value, Text. Pero todos ellos no se actualizan mientras el usuario escribe el valor, solamente despues que el usuario deja el campo es que estas propiedades son asignadas con el valor ingresado por el usuario. Lo que me gustaria hacer es en el evento OnKeyPress cancelar la tecla que el usuario presiono si el valor de esa tecla sumado al valor que ya ingreso el usuario no es valido. Para eso es necesario conocer los valores que el usuario ya ha ingresado pero cuando el campo todavia esta en edicion. Muchas gracias. |
#6
|
||||
|
||||
andre:
El problema es que un DbGrid no recibe directamente la entrada del teclado sino que crea una componente TEdit cada vez que se edita una celda. Esta componente- InPlaceEdit - es la que lleva a cabo la edición y por tanto tendrían que ser sus eventos sobre los que trabajes y no los del DbGrid. El detalle es que InPlaceEdit es una propiedad protegida del DbGrid por lo que no puedes acceder a ella directamente. Mira estos hilos TEdit en DBGrid Una de grid's en donde andres1569 explica como acceder a dicho TEdit. Lo que tendrías que hacer es asignar a InPlaceEdit el evento KeyPress cada vez que entres en modo de edición. // Saludos |
#7
|
|||
|
|||
Muchas gracias roman, eso soluciona mi inquietud, gracias a todos por su tiempo.
Saludos. |
|
|
|