so aceitar numero no edit

Delphi

10/03/2011

como faço para que so aceite numero no edit
se for salvar letra mostre um chowmessage ('so aceita numero')
Alessandra

Alessandra

Curtidas 0

Melhor post

Wilson Junior

Wilson Junior

10/03/2011

Utilize esta rotina
function  Ret_Numero(Key: Char; Texto: string; EhDecimal: Boolean = False): Char; 
begin 
  if  not EhDecimal then

    begin

      { Chr(8) = Back Space }

      if  not ( Key in ['0'..'9', Chr(8)] ) then

          Key := #0

      

    end

  else

    begin

      if  Key = #46 then

          Key := DecimalSeparator

      ;

 
      if  not ( Key in ['0'..'9', Chr(8), DecimalSeparator] ) then

          Key := #0

      else

        if  ( Key = DecimalSeparator ) and ( Pos( Key, Texto ) > 0 ) then

            Key := #0

        ;

      ;

    end

  ;

 
  Result := Key;

end;



Onde e como chamar:
{ Evento OnKeyPress do seu Edit }
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    Key := Ret_Numero( Key, Edit1.Text );
end;


Espero ter colaborado.
GOSTEI 1

Mais Respostas

Marco Salles

Marco Salles

10/03/2011

Geralmente se faz isto utilizando o OnKeyPress do Edit.. Testando o Key e abortando , ou mostrado uma mensagem caso o valor dele não seje numerico
GOSTEI 0
Alessandra

Alessandra

10/03/2011

eu gostaria de fazer com que
quando clicase no botão salvar ela aparecesse a mensagem ('aceita apenas numero')
se eu for colocar com o OnKeyPress ele altomaticamen aparece a mensagem 
GOSTEI 0
Wilson Junior

Wilson Junior

10/03/2011

Para aparecer a mensagem ao estiver digitando, faça:

{ Evento OnKeyPress do seu Edit }
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  Key := Ret_Numero( Key, Edit1.Text );   if  Key = #0 then       ShowMessage('Aceita apenas números')   ;
end;


Espero ter colaborado.
GOSTEI 0
Alessandra

Alessandra

10/03/2011

se eu quizer que uma string so receba valor numerico? cmo faço?
GOSTEI 0
Marco Salles

Marco Salles

10/03/2011

se eu quizer que uma string so receba valor numerico? cmo faço?
  bem , não conheço ou não estou lembrando de nada Nativo do Delphi que se possa utilizar então tente o método abaixo  
procedure TForm1.Button2Click(Sender: TObject);
var
s:String;
i:integer;
begin
s:='';
  for I := 1 to length(edit1.Text) do
    if CharInSet(edit1.Text[i],['0'..'9']) then
         s:=s+edit1.Text[i];
  showmessage(s);
end;
GOSTEI 0
José

José

10/03/2011

Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
GOSTEI 0
Guilherme Wiethaus

Guilherme Wiethaus

10/03/2011

Está correto o que nosso amigo acima falou e em muito eu utilizo estas linhas básicas de programação...

...ou pode-se utilizar também componentes gratuitos e muito bom que vai te atender neste quesito. O JCL/JVCL (Project Jedi Components). Utilize o JvValidateEdit que possui o que procura com outras características e funcionalidades interessantes.

Abraços
GOSTEI 0
Rafael Cruz

Rafael Cruz

10/03/2011

eu informo somente isso no evento keypress aceito somente numeros, backspace e enter

if not (key in [0..9,#8, #13]) then key := #0;

GOSTEI 0
Marco Salles

Marco Salles

10/03/2011

eu informo somente isso no evento keypress aceito somente numeros, backspace e enter

if not (key in [0..9,#8, #13]) then key := #0;



Veja ela não quer utilizar o evento

eu gostaria de fazer com que
quando clicase no botão salvar ela aparecesse a mensagem (aceita apenas numero)
se eu for colocar com o OnKeyPress ele altomaticamen aparece a mensagem


entende ???
GOSTEI 0
Rafael Cruz

Rafael Cruz

10/03/2011

caso ela clique no botão e no edit tenha letras da uma mensagem é isso ?

se for tenho uma função que pode ajudar eu acho

Function SoNumero(STR : String) : String;
// Filtra todos os numeros de uma string
var
Ind : Integer;
TmpRet : String;
begin
TmpRet := ;
for Ind := 1 to Length(STR) do
begin
if (Copy(STR,Ind,1) = 1) or (Copy(STR,Ind,1) = 2) or (Copy(STR,Ind,1) = 3) or (Copy(STR,Ind,1) = 4) or
(Copy(STR,Ind,1) = 5) or (Copy(STR,Ind,1) = 6) or (Copy(STR,Ind,1) = 7) or
(Copy(STR,Ind,1) = 8) or (Copy(STR,Ind,1) = 9) or (Copy(STR,Ind,1) = 0) then
begin
TmpRet := TmpRet + Copy(STR, Ind, 1);
end;
end;
Result := TmpRet;
end;


no click do botao pode colocar

if (length(edit1.text)) (length(sonumero(edit1.text))) then mensagem


Mais ai me pergunto.. se é um campo que só aceita gravar numero, pq fazer deixar o usuário digitar letra clicar no salvar e ter que voltar no edit corrigir pra salvar de novo.
GOSTEI 0
Gregory Monteiro

Gregory Monteiro

10/03/2011

teste
GOSTEI 0
POSTAR