Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Varios TEdit solo numericos (https://www.clubdelphi.com/foros/showthread.php?t=93747)

tarco35 11-02-2019 11:42:04

Varios TEdit solo numericos
 
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.
Código Delphi [-]
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:
Código Delphi [-]
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...

Código Delphi [-]
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.:
Código Delphi [-]
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 :)


La franja horaria es GMT +2. Ahora son las 22:08:16.

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