Ajuda - Busca - Membros - Calendário
Versão Completa: Erro No Edit
Fórum Script Brasil > Programação & Desenvolvimento > Delphi, Kylix
luizf
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+
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 wink.gif
Thales Pontes Martins
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->

CODE
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->

CODE
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;


Tamires
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;
Thales Pontes Martins
QUOTE(Tamires @ Nov 6 2006, 08:40 AM) *

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.
Paulo Nobre
Thales,
Tive problemas com o código do post#3

CODE

if not(key in ['0'..'9']) then key:=0;

Ele apresenta erro de incompatibilidade de types: Char e Integer

CODE

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?


Thales Pontes Martins
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.
Thales Pontes Martins
Agora acho que está certo ->
CODE
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;
Micheus
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);
Paulo Nobre
Thales
Testei o novo código e ficou redondinho.
Obrigado
luizf
Muito Obrigado a todos vocês, vou testar e ver no que dá.

T+
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.