Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como saber el Dato Capturado en Celda de un dbGrid. (https://www.clubdelphi.com/foros/showthread.php?t=17795)

AGAG4 21-01-2005 18:42:02

Como saber el Dato Capturado en Celda de un dbGrid.
 
Como puedo saber el Dato Capturado en Celda de un dbGrid antes de presionar el TAB ó ENTER, esto se puede hacer en un tedit, tdbedit,etc, pero no logro encontrar en que evento puedo hacer eso dentro de un dbgrid ya me puse a investigar en internet y no he encontrado nada, en la ayuda de delphi y nada, yas probe en el onkeypress que es donde quiero hace esta validación, dicha validación es hacia una celda de tipo Flotante por lo que no quiero que el usuario captura mas de 2 puntos decimales(..), solamente ocupo donde cachar el DATO que esta capturando el usuario antes de presionar TAB ó ENTER.

Agradezco cualquier sugerencia

ISKANDAR 21-01-2005 20:27:21

Mirá, no sé si entendí bien lo que necesitás pero creo que es algo como esto:
Para ir validadndo si el valor ingresado (flotante) se está escribiendo correctamente, podrías crear un objeto como éste al inicio del formulario:

Código Delphi [-]
 
.
type
  TValorCelda = Class(TObject)
  private
    Numero : String;
    Puntos : Byte;
  public
    constructor Create;
    procedure Inicializar;
    function Validar(Caracter: Char): Boolean;
    function GetNumero:String;
    function NumeroAsFloat: Real;
    function GetPuntos: Byte;
  end;
.
.
.
implementation
.
.
.
procedure TValorCelda.Inicializar;
begin
    Numero:='';
    Puntos:=0;
end;
 
function TValorCelda.Validar(Caracter: Char):Boolean;
begin
    if IsNumeric(Caracter) then
        begin
        Numero:=Numero+Caracter;
        Result:=True;
        end
        else
            if (Caracter='.') AND (Puntos=0)then
                begin
                Numero:=Numero+Caracter;
                Puntos:=Puntos+1;
                Result:=True;
                end
                else
                    Result:=False;
end; 
.

Lo deberías inicializar luego de cada cambio de celda en el grid. En el metodo OnKeyPress del grid:

Código Delphi [-]
 var
    flag: Boolean;
begin
    flag:= ValorCelda.Validar(key);
    if not flag and (ValorCelda.GetPuntos>0) then //Si se cumple esto, es invalido porque ingresó 2 puntos
        ShowMessage('Ingresó 2 puntos!');
.

y una vez que hace tab o presiona enter...

Código Delphi [-]
         DataSet.Campo:=ValorCelda.NumeroAsFloat;
De este modo el valor que te devuelva NumeroAsFloat siempre es válido, y lo podés asignar a la celda, campo o donde sea que lo necesites.
Espero haber entendido bien tu pregunta :D , Saludos.

AGAG4 21-01-2005 22:31:44

Gracias
 
Gracias SKANDAR eso es lo que andaba investigando, de no permitir que capturen más de 2 puntos decimales en una celda Flotante ó Entera, lo voy aprobar....

Que tenga buen día.

ISKANDAR 21-01-2005 23:11:44

Bueno, me alegro que te haya servido, puesto que en principio no habia entendido bien la pregunta. Lo único que veo que me faltó es poner el código de GetNumero, GetPuntos y NumeroAsFloat, pero por sus nombres me imagino que no tendrás problemas en rellenarlos ;). Suerte.


La franja horaria es GMT +2. Ahora son las 11:30:40.

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