Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 1 Semana
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 63
Poder: 2
Soa Pelaez Va por buen camino
Capturar texto que se este ingresado en celda DBGrid

Buen día.

Tengo una cuestión, necesito capturar la entrada del texto en una celda de un dbgrid para validar el ingreso de 1 sola coma y dos decimales, pero al obtener el texto asi, no me refresca el valor cuando ingreso más comas o más números.

Código Delphi [-]
//Evento keypress de la dbgrid
var Texto: string;
  if DBGrid.SelectedField = CampoValidar then
    Texto:= DBGrid.Fields[3].Text//Capturo el texto de la columna 
    //Texto:= DBGGenerales.DataSource.DataSet.FieldByName('nnv_cantidad_novedad').AsString
   //Texto:= DBGGenerales.Fields[3].AsString

Si por primera vez ingreso 1 la variable Texto = '1', pero si ingreso comas o números la cantidad que sea la variable sigue valiendo 1.

Lo he intentado de varias formas pero no me funciona, no me toma el valor a medida que voy digitando, y lo necesito así a medida que el usuario vaya digitando para validar correctamente el contenido de la celda.


Espero puedan ayudarme.

Muchas gracias.

Última edición por Soa Pelaez fecha: Hace 1 Semana a las 23:49:09.
Responder Con Cita
  #2  
Antiguo Hace 5 Días
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 63
Poder: 2
Soa Pelaez Va por buen camino
Como validar el texto que se esté ingresando en la celda de una DBGRID

Buen día.

Tengo una cuestión, necesito capturar la entrada del texto en una celda de un dbgrid para validar el ingreso de 1 sola coma y dos decimales, pero al obtener el texto asi, no me refresca el valor cuando ingreso más comas o más números.

Código Delphi [-]
//Evento keypress de la dbgrid
var Texto: string;
  if DBGrid.SelectedField = CampoValidar then
    Texto:= DBGrid.Fields[3].Text//Capturo el texto de la columna 
    //Texto:= DBGGenerales.DataSource.DataSet.FieldByName('nnv_cantidad_novedad').AsString
   //Texto:= DBGGenerales.Fields[3].AsString

Si ingreso comas o números, el valor de la variable sigue siendo ''.

Lo he intentado de varias formas pero no me funciona, no me toma el valor a medida que voy digitando, y lo necesito así a medida que el usuario vaya digitando para validar correctamente el contenido de la celda.


Espero puedan ayudarme.

Muchas gracias.
Responder Con Cita
  #3  
Antiguo Hace 5 Días
Avatar de movorack
[movorack] movorack is offline
Miembro
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 991
Poder: 11
movorack Va camino a la fama
Hola!,

y eso no se puede manejar en el evento OnValidate del campo.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #4  
Antiguo Hace 5 Días
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 63
Poder: 2
Soa Pelaez Va por buen camino
Cita:
Empezado por movorack Ver Mensaje
Hola!,

y eso no se puede manejar en el evento OnValidate del campo.

Así no me sirve porque necesito validarlo a medida que vaya digitando y no después de que salga del campo.
Responder Con Cita
  #5  
Antiguo Hace 5 Días
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 27.162
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues en el onChange.
Responder Con Cita
  #6  
Antiguo Hace 5 Días
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 63
Poder: 2
Soa Pelaez Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Pues en el onChange.
Lo intente ahí también pero no me refresca el valor de la variable sino hasta que salga de la celda de la DBGRID.
Responder Con Cita
  #7  
Antiguo Hace 5 Días
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 247
Poder: 7
Caminante Va camino a la fama
Hola

Pensandolo detenidamente no creo que puedas hacer lo que quieres desde un evento del DBGrid.
Cuando empiezas a editar una celda el dbgrid crea automaticamente un editor (por defecto un Edit, corriganme si me equivoco) y lo que tendrias que hacer es capturar su evento onkeypress.

He visto otros dbgrids que admiten personalizar el control a usar como editor en tal caso seria mas facil controlar lo que se teclea desde ahi.

Se que no es de mucha ayuda pero en este caso creo que mejor optaria por crear una ventana aparte para modificar el registro.

Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #8  
Antiguo Hace 4 Días
Avatar de _Leo
_Leo _Leo is offline
Miembro
 
Registrado: ene 2017
Ubicación: Lanzarote (Islas Canarias)
Posts: 19
Poder: 0
_Leo Va camino a la fama
Como bien dice Caminante, cuando se edita in situ un campo en el DBGrid, en realidad se está haciendo en un "TEdit" (TDBGridInplaceEdit) sobrepuesto, por lo que todavía no está el contenido que estamos editando en el DBGrid.

Se podría hacer capturando el evento OnKeyPress de ese Edit sobrepuesto, pero también podemos hacer algo más sencillo ya que las pulsaciones que van destinadas a ese control también pasan por el OnKeyPress del DBGrid. A ver si te sirve esta chapucilla como base:

Código Delphi [-]
procedure TForm1.DBGridKeyPress(Sender: TObject; var Key: Char);
var
  texto: String;
begin
  if (DBGrid.SelectedField.FieldName = 'CANTIDAD') then
  begin
    // Comprobamos que existe algún control "inplace" en el DBGrid
    if (DBGrid.ControlCount > 0) then
    begin
      // Obtenemos el texto del TDBGridInplaceEdit
      texto := TEdit(DBGrid.Controls[0]).Text;
      // ...
      // Como ejemplo, si ya existe una coma en "texto" no permitimos otra
      if (Key = ',') AND (Pos(',', texto) > 0) then Key := #0;
    end;
  end;
end;
Responder Con Cita
  #9  
Antiguo Hace 4 Días
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 63
Poder: 2
Soa Pelaez Va por buen camino
Cita:
Empezado por _Leo Ver Mensaje
Como bien dice Caminante, cuando se edita in situ un campo en el DBGrid, en realidad se está haciendo en un "TEdit" (TDBGridInplaceEdit) sobrepuesto, por lo que todavía no está el contenido que estamos editando en el DBGrid.

Se podría hacer capturando el evento OnKeyPress de ese Edit sobrepuesto, pero también podemos hacer algo más sencillo ya que las pulsaciones que van destinadas a ese control también pasan por el OnKeyPress del DBGrid. A ver si te sirve esta chapucilla como base:

Código Delphi [-]
procedure TForm1.DBGridKeyPress(Sender: TObject; var Key: Char);
var
  texto: String;
begin
  if (DBGrid.SelectedField.FieldName = 'CANTIDAD') then
  begin
    // Comprobamos que existe algún control "inplace" en el DBGrid
    if (DBGrid.ControlCount > 0) then
    begin
      // Obtenemos el texto del TDBGridInplaceEdit
      texto := TEdit(DBGrid.Controls[0]).Text;
      // ...
      // Como ejemplo, si ya existe una coma en "texto" no permitimos otra
      if (Key = ',') AND (Pos(',', texto) > 0) then Key := #0;
    end;
  end;
end;
Lo he probado de esta manera y no funciona correctamente, me explico la primera vez digito 2 y la variable texto = '', luego de digitar 2 digito 1 osea 21, ahi si cuando entra a esta validación me aparece el 2, y si escribo otro número más ahi si me aparece el 1, y lo que necesito es que a medida que vaya digitando la variable texto valga lo mismo que escribí en la celda.

Es un buen indicio la manera en que lo planteas pero aún falta esa cosa y quedaría como lo necesito.

Muchas gracias.
Responder Con Cita
  #10  
Antiguo Hace 4 Días
Avatar de movorack
[movorack] movorack is offline
Miembro
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 991
Poder: 11
movorack Va camino a la fama
Cita:
Empezado por Soa Pelaez Ver Mensaje
lo que necesito es que a medida que vaya digitando la variable texto valga lo mismo que escribí en la celda... Es un buen indicio la manera en que lo planteas pero aún falta esa cosa y quedaría como lo necesito.
Eso es porque estás revisando el texto en el OnKeyPress. Antes de que al texto se le agregue el caracter que estás digitando.

Puedes sumar el caracter al texto actual y así obtener el texto completo.

Código Delphi [-]
procedure TForm3.DBGrid1KeyPress(Sender: TObject; var Key: Char);
  var
    lStTemp: String;
begin
  if (TDBGrid(Sender).SelectedField.FieldName = 'Field1')
    and (TDBGrid(Sender).ControlCount > 0)
    and (TDBGrid(Sender).Controls[0] is TInplaceEdit)
  then
  begin
    lStTemp := TEdit(TDBGrid(Sender).Controls[0]).Text + Key;

    ///Se procesa el texto para validar el formato.
    ///Insert your amazing code here
  end;
end;

o puedes manejarlo cuando ya el texto está completo en el OnKeyUp

Código Delphi [-]
procedure TForm3.DBGrid1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var
    lStTemp: String;
begin
  if (TDBGrid(Sender).SelectedField.FieldName = 'Field1')
    and (TDBGrid(Sender).ControlCount > 0)
    and (TDBGrid(Sender).Controls[0] is TInplaceEdit)
  then
  begin
    lStTemp := TEdit(TDBGrid(Sender).Controls[0]).Text;

    ///Se procesa el texto para validar el formato.
    ///Insert your amazing code here
  end;
end;
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #11  
Antiguo Hace 4 Días
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 63
Poder: 2
Soa Pelaez Va por buen camino
Cita:
Empezado por movorack Ver Mensaje
Eso es porque estás revisando el texto en el OnKeyPress. Antes de que al texto se le agregue el caracter que estás digitando.

Puedes sumar el caracter al texto actual y así obtener el texto completo.

Código Delphi [-]
procedure TForm3.DBGrid1KeyPress(Sender: TObject; var Key: Char);
  var
    lStTemp: String;
begin
  if (TDBGrid(Sender).SelectedField.FieldName = 'Field1')
    and (TDBGrid(Sender).ControlCount > 0)
    and (TDBGrid(Sender).Controls[0] is TInplaceEdit)
  then
  begin
    lStTemp := TEdit(TDBGrid(Sender).Controls[0]).Text + Key;

    ///Se procesa el texto para validar el formato.
    ///Insert your amazing code here
  end;
end;

o puedes manejarlo cuando ya el texto está completo en el OnKeyUp

Código Delphi [-]
procedure TForm3.DBGrid1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var
    lStTemp: String;
begin
  if (TDBGrid(Sender).SelectedField.FieldName = 'Field1')
    and (TDBGrid(Sender).ControlCount > 0)
    and (TDBGrid(Sender).Controls[0] is TInplaceEdit)
  then
  begin
    lStTemp := TEdit(TDBGrid(Sender).Controls[0]).Text;

    ///Se procesa el texto para validar el formato.
    ///Insert your amazing code here
  end;
end;
De esta manera pude validarlo muchas gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Capturar texto que se este ingresado en celda DBGrid Soa Pelaez Varios 0 Hace 1 Semana 23:27:46
Ajustar texto en una celda de un DBGrid rubio OOP 15 19-10-2011 21:50:19
Cómo posicionar el cursor al final del texto de una celda de un dbgrid Casimiro Notevi API de Windows 4 02-09-2011 14:27:50
Validar celda de DBGrid acalderonr Varios 3 29-06-2007 19:30:05
Como Pintar Solo la Celda y No Toda la Columna de la Celda de un dbGrid?? AGAG4 Varios 11 15-11-2004 20:53:28


La franja horaria es GMT +2. Ahora son las 06:38:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi