Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-06-2004
andre andre is offline
Miembro
 
Registrado: may 2003
Ubicación: Entre Rios, Argentina
Posts: 80
Poder: 22
andre Va por buen camino
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.
__________________
Andre R. Coelho
Universidad Adventista del Plata
Responder Con Cita
  #2  
Antiguo 15-06-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 16-06-2004
andre andre is offline
Miembro
 
Registrado: may 2003
Ubicación: Entre Rios, Argentina
Posts: 80
Poder: 22
andre Va por buen camino
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.
__________________
Andre R. Coelho
Universidad Adventista del Plata
Responder Con Cita
  #4  
Antiguo 16-06-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 16-06-2004
andre andre is offline
Miembro
 
Registrado: may 2003
Ubicación: Entre Rios, Argentina
Posts: 80
Poder: 22
andre Va por buen camino
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.
__________________
Andre R. Coelho
Universidad Adventista del Plata
Responder Con Cita
  #6  
Antiguo 16-06-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #7  
Antiguo 16-06-2004
andre andre is offline
Miembro
 
Registrado: may 2003
Ubicación: Entre Rios, Argentina
Posts: 80
Poder: 22
andre Va por buen camino
Muchas gracias roman, eso soluciona mi inquietud, gracias a todos por su tiempo.

Saludos.
__________________
Andre R. Coelho
Universidad Adventista del Plata
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 02:01:55.


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
Copyright 1996-2007 Club Delphi