Ir para conteúdo
Fórum Script Brasil
  • 0

Erro No Edit


luizf

Pergunta

Ola pessoal, preciso de uma ajudinha.

É coisa simples, não para mim que sou iniciante.

Preciso pegar o valor de um editbox, mas caso o botão seja precionado antes de colocar o valor, é dado um erro.

Function F_Exemplo(valor: Integer): String;

...

...

...

Result := sstr;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

str: string;

int: integer;

begin

int:= StrToInt (edit1.Text);

str := F_Exemplo (int);

edit2.text:= str;

end;

Gostaria de colocar um código, para que quando precionar o button1 e não estiver colocado um numero no edit, fizesse um checagem se o edit foi escrito e se foi verificar se é inteiro, para no caso de digitar um letra e na hora de rodar vai dar erro de novo.

Creio que é coisa simples, mas não sei fazer.

Muito Obrigado e um abraço a todos.

T+

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0
Guest Visitante

Com o meu conhecimento da pra fazer assim

coloque um if assim:

if edit1.Text = '' then begin

showmessage ('Escreva alguma coisa no edit!');

agora pra saber se é um int já não sei como faz ;)

Link para o comentário
Compartilhar em outros sites

  • 0

Já que só tem eu aqui mesmo então vamo lá->

Você pode colocar no evento OnKeyPress da edit esse comando para que não aceite letras->

if not(key in ['0'..'9']) then key:=0;
e se você quiser que aceite número negativo você coloca antes desse comando o seguinte->
if (key = '-') then
begin
  if (sender.text[1] = '-') then 
  begin
    sender.text:=copy(sender.text,2,length(sender.text)-1);
  end else sender.text:='-'+sender.text;
end;

Link para o comentário
Compartilhar em outros sites

  • 0

Bom gente, não sei se tá certo o que vou escrever, mas pra ver se é inteiro o que está dentro do edit eu faço assim:

Passo o valor do edit pra uma variável, transformando-o para inteiro.

Se não for um inteiro válido, dá erro. Coloco isso dentro de um "try".

Ex:

try

vNum := StrToInt(edtNum.text);

except

ShowMessage('Número inválido.');

exit;

end;

Link para o comentário
Compartilhar em outros sites

  • 0

Bom gente, não sei se tá certo o que vou escrever, mas pra ver se é inteiro o que está dentro do edit eu faço assim:

Passo o valor do edit pra uma variável, transformando-o para inteiro.

Se não for um inteiro válido, dá erro. Coloco isso dentro de um "try".

Ex:

try

vNum := StrToInt(edtNum.text);

except

ShowMessage('Número inválido.');

exit;

end;

100% certo.

Link para o comentário
Compartilhar em outros sites

  • 0

Thales,

Tive problemas com o código do post#3

if not(key in ['0'..'9']) then key:=0;
Ele apresenta erro de incompatibilidade de types: Char e Integer
if (key = '-') then
begin
  if (sender.text[1] = '-') then 
  begin
    sender.text:=copy(sender.text,2,length(sender.text)-1);
  end else sender.text:='-'+sender.text;
end;

Na parte acima ele diz que Undeclarede Identifier: 'text'.

Aí substituo sender pelo nome do edit(no meu caso txtNumeroInteiro) e compila legal.

Na hora de usar:

se digito, por exemplo,9 - ele coloca -9 tudo bem,mas se digito

primeiro 0 sinal de meno(-) dá acesso de violação.

O que poderia estar acontecendo?

Link para o comentário
Compartilhar em outros sites

  • 0

Ahh é, é que eu escreví sem testar mas você já deveria saber que tem que ser (sender as TEdit).text.

E o acesso de violação é porque você tem que testar pra ver se a string está vazia. Eu vou escrever direitinho e depois eu posto.

Link para o comentário
Compartilhar em outros sites

  • 0

Agora acho que está certo ->

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
  p : cardinal;
  _edit :TEdit;
begin
  _edit:=TEdit(sender);
  if (key = '-') then
  begin
    if (length(_edit.Text)>0) and (_edit.text[1] = '-') then
    begin
      p:=_edit.SelStart;
      _edit.text:=copy(_edit.text,2,length(_edit.text)-1);
      _edit.SelStart:=p-1;
    end else
    begin
      p:=_edit.SelStart;
      if (length(_edit.Text) > 0) then _edit.text:='-'+_edit.text else _edit.Text:='-';;
      _edit.SelStart:=p+1;
    end;
  end;
  if not(key in ['0'..'9',#8]) then key:=#0;
end;

Link para o comentário
Compartilhar em outros sites

  • 0

luizf, se for para digitar apenas Inteiros positivos, então pode ficar um pouco mais simples.

No OnCreate do form, passe o handle do Edit desejado nas funções do exemplo abaixo:

Ex.: SetWindowLong(Edit1.Handle, GWL_STYLE, GetWindowLong(Edit1.Handle, GWL_STYLE) or ES_NUMBER);

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...