Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Texto en celda del DBGrid antes del Post (https://www.clubdelphi.com/foros/showthread.php?t=11495)

andre 15-06-2004 21:50:55

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.

__marcsc 15-06-2004 22:19:00

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 ;)

andre 16-06-2004 13:48:14

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.

marto 16-06-2004 14:06:00

Puedes probar con la propiedad NewValue del TField, aunque siempre que he necesitado hacer lo que comentas, he usado la técnica de marc ;)

andre 16-06-2004 14:16:13

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.

roman 16-06-2004 16:56:29

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

andre 16-06-2004 17:04:36

Muchas gracias roman, eso soluciona mi inquietud, gracias a todos por su tiempo.

Saludos.


La franja horaria es GMT +2. Ahora son las 19:54:51.

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