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 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
, Saludos.