Edit que só aceita números

Delphi

19/07/2013

Bom Dia!

Estou com uma probleminha no evento do edit.
O que eu queria era que: quando apertar o enter ele verificasse se só tem
números se sim ele chama um outro evento se não a msg.

no OnKeyPress eu implementei o código:
rocedure TfrmVisualizadorProcessos.edtNumPaginaKeyPress(Sender: TObject;
  var Key: Char);
begin
  If Key = #13 then//para usar o Enter
  begin
    Key := #0;
    if (key in ['0'..'9'] = false) then // tenho que colocar número por número?
    begin
      Key := #0;

      btnIrParaClick(Self);
      edtNumPagina.SetFocus;
    end;
  end
  else
  Application.MessageBox('Este campo só acita números!','Aviso',mb_Ok+MB_ICONINFORMATION);
end;
Eduardo Mendonça

Eduardo Mendonça

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

19/07/2013

Analise a lógica do seu código:

Linha 4: Se Key=#13 então Key não tem outro valor a não ser #13, logo, não faz sentido comparar com mais nada.

Linha 6: Você devine Key como #0, então nem adianta mais compara com outro valor, pois Key aogra é #0.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

19/07/2013

Você quer quando teclar enter, verificar se só existem números no edit?
Ou quer que a cada caractere digitado, verifique se é um número e execute algo.
GOSTEI 0
Marco Salles

Marco Salles

19/07/2013

Você quer quando teclar enter, verificar se só existem números no edit?
Ou quer que a cada caractere digitado, verifique se é um número e execute algo.


eu entendi do primeiro modo

quando teclar enter, verificar se só existem números no edit?

Logo

var
numero:Integer;
begin
  If Key = #13 then//para usar o Enter
  begin
    Key := #0;
    if  TryStrToInt(Tedit(sender).Text,numero) then // testa se so tem Numeros
    begin
       btnIrParaClick(Self);
      edtNumPagina.SetFocus;
    end
    else
    Application.MessageBox('Este campo só acita números!','Aviso',mb_Ok+MB_ICONINFORMATION);
  end;
GOSTEI 0
Eduardo Mendonça

Eduardo Mendonça

19/07/2013

tem um campo que só para aceita números e quando aperta enter ele dispara
o evento btnIrParaClick(Self); se eu deixar
If Key = #13 then//para usar o Enter
  begin
    Key := #0;// sem isso da um Beep feio
    btnIrParaClick(Self);
  end;
ele Funciona só normal sem Beep só que permite outros caracteres
no que eu postei anteriormente só de apertar um numero já caio no aviso.
eu preciso que quando usuário digite o numero e quando apertar enter ele
verifique se é número e se sim dispara o btnIrParaClick(Self); se não o
aviso
Application.MessageBox('Este campo só acita números!','Aviso',mb_Ok+MB_ICONINFORMATION);
GOSTEI 0
Eduardo Mendonça

Eduardo Mendonça

19/07/2013

Você quer quando teclar enter, verificar se só existem números no edit?
Ou quer que a cada caractere digitado, verifique se é um número e execute algo.


eu entendi do primeiro modo

quando teclar enter, verificar se só existem números no edit?

Logo

var
numero:Integer;
begin
  If Key = #13 then//para usar o Enter
  begin
    Key := #0;
    if  TryStrToInt(Tedit(sender).Text,numero) then // testa se so tem Numeros
    begin
       btnIrParaClick(Self);
      edtNumPagina.SetFocus;
    end
    else
    Application.MessageBox('Este campo só acita números!','Aviso',mb_Ok+MB_ICONINFORMATION);
  end;

no lugar do Tedit(sender) eu coloco o meu edit?
GOSTEI 0
Marco Salles

Marco Salles

19/07/2013

no lugar do Tedit(sender) eu coloco o meu edit?


Pode mas não é necessário .. Colocar o seu edit vc limita o código a ser utilizado somente no seu edit

se vc tiver outros edits com o mesmo código vc vai ter que escrever outros códigos com a mesma função

porém utilizando o Parãmetro sender vc generaliza para qq objeto da classe Tedit

[]sds
GOSTEI 0
Eduardo Mendonça

Eduardo Mendonça

19/07/2013

eu testei o seu codigo. quando digito letras ele não vai para a msg de erro que eu fiz ele da um erro do delph
GOSTEI 0
Eduardo Mendonça

Eduardo Mendonça

19/07/2013


MARCO ANTONIO
Não sei nem explicar mas do nada o código esta funcionando
eu fiz dois teste logo quando você postou e deu errado
e agora eu recoloquei o código e ele funcionou perfeito.


Já não é a primeira vez que isso acontece du nado o código que não funfava roda direitinho


Obrigado!


GOSTEI 0
Cleverson.

Cleverson.

19/07/2013

O Edit tem a propriedade NumbersOnly, é só alterar o valor para True que o mesmo vai aceitar somente números.
GOSTEI 0
Marco Salles

Marco Salles

19/07/2013

O Edit tem a propriedade NumbersOnly, é só alterar o valor para True que o mesmo vai aceitar somente números.


os mais antigos não
GOSTEI 0
Eduardo Mendonça

Eduardo Mendonça

19/07/2013

Eu uso Delphi 7 e não tem essa propriedade.
GOSTEI 0
Marco Salles

Marco Salles

19/07/2013

Eu uso Delphi 7 e não tem essa propriedade.


sim , mas deve-se deixar claro que é facílimo criar um Componente TEdit com esta propriedade. Existe bibliotecas de
componentes para o Delphi7 onde foi estendido esta propriedade ou característica

[]sds
GOSTEI 0
Eduardo Mendonça

Eduardo Mendonça

19/07/2013

vou procurar aqui e 2ª feira eu vejo como vai ficar
GOSTEI 0
Gabriel Simas

Gabriel Simas

19/07/2013

Prezado colega,

Veja se este trecho lhe ajuda em algo?

procedure TCadastro.ValidaCampoClick(Sender: TObject);
var
  apenasNumero: double;
begin
  if TryStrToFloat(edtValor.Text, ApenasNumero) then
     blah = apenasNumero;
  else
    ShowMessage('uhum! tá querendo inventar? é malandro da onde, irmão?');
end;


Tem muito tempo que não programo em Delphi, mas que eu me lembre eu fazia assim, hehe

Forte Abraço e espero ter ajudado.

Gabriel Simas
GOSTEI 0
Marco Salles

Marco Salles

19/07/2013

Prezado colega,

Veja se este trecho lhe ajuda em algo?

procedure TCadastro.ValidaCampoClick(Sender: TObject);
var
  apenasNumero: double;
begin
  if TryStrToFloat(edtValor.Text, ApenasNumero) then
     blah = apenasNumero;
  else
    ShowMessage('uhum! tá querendo inventar? é malandro da onde, irmão?');
end;


gabrielsimas a dúvida original dele ja foi solucionada . Alguém porém sugeriu utilizar a propriedade NumbersOnly do TEdit presente se não me falha a memória somente a partir do Delphi2007 . Como o amigo utiliza Delphi7 foi sugerido caso não queira utilizar o evento onkeyPress , que ele crie um Controle que iniba caracteres diferentes de Números ou
que utilize a vasta biblioteca espalhada na net para este propósito . Entendeu ???

Tem muito tempo que não programo em Delphi, mas que eu me lembre eu fazia assim, hehe

Forte Abraço e espero ter ajudado.

Gabriel Simas
GOSTEI 0
Gabriel Simas

Gabriel Simas

19/07/2013

Prezado colega,

Veja se este trecho lhe ajuda em algo?

procedure TCadastro.ValidaCampoClick(Sender: TObject);
var
  apenasNumero: double;
begin
  if TryStrToFloat(edtValor.Text, ApenasNumero) then
     blah = apenasNumero;
  else
    ShowMessage('uhum! tá querendo inventar? é malandro da onde, irmão?');
end;


gabrielsimas a dúvida original dele ja foi solucionada . Alguém porém sugeriu utilizar a propriedade NumbersOnly do TEdit presente se não me falha a memória somente a partir do Delphi2007 . Como o amigo utiliza Delphi7 foi sugerido caso não queira utilizar o evento onkeyPress , que ele crie um Controle que iniba caracteres diferentes de Números ou
que utilize a vasta biblioteca espalhada na net para este propósito . Entendeu ???

Tem muito tempo que não programo em Delphi, mas que eu me lembre eu fazia assim, hehe

Forte Abraço e espero ter ajudado.

Gabriel Simas


Sim, entendi.

Forte Abraço.

Gabriel Simas
GOSTEI 0
Eduardo Mendonça

Eduardo Mendonça

19/07/2013

Já Consegue resolver Descobrir o MaskEdit lol que fica muito melhor não Aparece msg mas também só entra no edit o que
você quiser.

Muito Obrigado a todos.



Pode Fechar o Topico
GOSTEI 0
Marco Salles

Marco Salles

19/07/2013

Que bom que vc descobriu o Maskedit que fica muito melhor mas que não Aparece msg mas também só entra no edit o que
você quer . que bom . Vou fechar o tópico
GOSTEI 0
POSTAR