PDA

Ver la Versión Completa : Varios TEdit solo numericos


tarco35
11-02-2019, 11:42:04
Hola, como puedo hacer para que varios TEdit del form solo acepten datos numericos Hay soluciones por aqui, pero tendria que hacer un procedimiento en el evento OnKeyDown por cada uno de los TEdit, y la idea seria hacer uno y despues el resto de TEdit en el evento que llamaran al procedimiento para validar la entrada.
Gracias

Casimiro Notevi
11-02-2019, 12:31:30
Puedes usar el mismo evento para todos los edit.

tarco35
11-02-2019, 12:33:48
Si, eso es lo que deseo, pero como le sumo el caracter de la tecla pulsada al Tedit que sea??

Casimiro Notevi
11-02-2019, 12:57:43
Deduzco que estás haciendo una calculadora.
Tienes diversas formas, por ejemplo, en la propiedad de cada tecla pones su número. En el tag del 1 pones un 1, en el tab del 2 pones un 2, etc.
Luego, en el evento común a todas las teclas, al hacer click, detectas su tag y actuas en consecuencia.

TeclaPulsada( Sender:Tbutton );
var iTecla:int;
begin
iTecla = sender.tag;
if iTecla=1 then
...
else if iTecla=2 then
...
etc.
end;

tarco35
11-02-2019, 13:28:31
Gracias Casimiro
No es una calculadora, son 9 Tedit para que el usuario meta (o no) datos numericos y si pulsa una tecla que no sea numero, coma, supr, del, pues no haga nada y ni siquiera aparezca en el text del Tedit que corresponda

tarco35
11-02-2019, 14:06:55
Muestro como lo he resuelto:

procedure TFormNuevaVisita.Edit2KeyPress(Sender: TObject; var Key: Char);
var
cd:string;
begin
If Key='.' then Key:=',';
cd :=(Sender as TEdit).Text; // variable intermedia para clarificar codigo
If ((Pos(',',Cd))<>0) AND (Key=',') Then Key:=#0; // solo se permite un signo de puntuacion
(Sender as TEdit).ReadOnly := not (key in [#8,#46, ',','0'..'9']); // sentencia encontrada por el foro, no recuerdo de quien
end;


Ahora ya puedo asignarle al evento OnKeyPress de los 9 TEdit la misma rutina
Gracias a todos.

movorack
11-02-2019, 14:20:54
Para que no te enredes con lo del formato...


procedure TForm1.NumericKeyPress(Sender: TObject; var Key: Char);
var
lExTemp: Extended;
begin
if not TryStrToFloat(TEdit(Sender).Text+Key, lExTemp) then
Key := #0;
end;

tarco35
11-02-2019, 19:19:54
Gracias, aunque Delphi6 no la tiene, tiene una parecida.
Muy buena aportacion.

ecfisa
11-02-2019, 19:34:49
Hola.

Te aconsejo usar un código similar en los eventos OnExit de los Edits para verificar los datos que pudieran ingresar por copiado/pegado.

Ej.:

procedure TForm1.EditsExit(Sender: TObject);
var
ed: TEdit;
v: Extended;
begin
ed := TEdit(Sender);
if (ed.Text > '') and not TryStrToFloat(ed.Text, v) then
begin
ed.SetFocus;
raise Exception.Create('Número inválido');
end;
end;


Saludos :)