Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Edits solo acepte numeros y , . (https://www.clubdelphi.com/foros/showthread.php?t=72575)

JXJ 27-02-2011 05:52:11

Edits solo acepte numeros y , .
 
este es mi pequeño problema

estoy viendo que un edit me acepte

solo numero y sus delimitadores como son

, .

algo asi. 100.20

ó
100,20

5, 500.50
5, 500,50
5.500.50


encontre este codigo pero no se bien como adaptarlo

Código Delphi [-]
  if not(Key in ['0'..'9',#8]) then
  begin
    Key:=#0;
  end;

José Luis Garcí 27-02-2011 08:32:59

ese código es para que lo pongas en el evento OnkeyPress del edit, así cada vez que pulses una tecla, comprobara que este dentro de ese rango, si no no la admite y no la representa.

newtron 27-02-2011 09:24:43

Hola.

El controlar por código en cada uno de los edits que vayas a usar el tipo de campo que va a admitir, cadena, numérico, fecha, etc se te puede volver bastante engorroso en el momento que tengas unos cuantos edits, cosa que será lo habitual.

Yo te recomendaría crear, o en su defecto, usar algún componente para los edits que ya tengan implementada esas propiedades y te ahorrarás bastante faena y problemas.

Saludos

José Luis Garcí 27-02-2011 10:11:31

Busca mi componente en el Club, TEditDefault, si quieres usar un componente, claro..

ecfisa 28-02-2011 00:42:50

Hola JXJ.

Para que solo admita números y los delimitadores '.' y ',' , basta con poner este código en el evento OnKeyPress de los Edits.
Código Delphi [-]
procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in [#8,'0'..'9',',','.']) then
  begin
    MessageBeep(MB_ICONERROR);
    Key:= #0;
  end;
end;

Pero existe la posibilidad de que duplique un delimitador u otra inconsistencia que realize por copiar/pegar. Por lo que deberías complementar con este código en el evento OnExit de los Edits.
Código Delphi [-]
procedure TForm1.EditExit(Sender: TObject);
var
  d: Double;
begin
  if not TryStrToFloat(TEdit(Sender).Text,d) then
  begin
    MessageBeep(MB_ICONERROR); //o el mensaje que quieras
    TEdit(Sender).SetFocus;
  end;
end;

Un saludo.

JXJ 02-03-2011 02:54:21

ecfisa
Eres grande.

Un saludo.


La franja horaria es GMT +2. Ahora son las 18:59:47.

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