Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

dorgi

[Resolvido] Soma entre Edit's

Recommended Posts

olá a todos!

 

estou iniciando no delphi, estou eleborando um projeto que multiplica umas edit´s e o resultado delas é colocado em outras edit´s, estou usando o onchange das edit´s para poder os valores assim que digitados nas edit´s que irao multiplicar os resultados aparecerao ao mesmo tempo sem precisar de botões para tal fato. até tudo bem, o problema esta aparecendo agora que estou querendo implementar uma soma automatica das edit´s que estão com os resultados das multiplicações, a soma esta saindo direito só que quando necessario trocar os valores e os edits ficam vazios retorna um erro de conversao de tipos, o projeto nao cai mais toda vez que se tem de alterar esses valores fica acontecendo esse erro! voçes poderiam me ajudar?

 

dorgi

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro, sempre que postar uma dúvida coloque o código para análise... segundo, o problema de por este tipo de evento no onchange é que se você apagar o edit e não testar isso antes de tentar converter vai dar pau mesmo... porque no delphi tentar converter uma string vazia em integer ou qualquer outra coisa gera uma excessão.

 

Há dois modos de se tratar isso: uma é testando se tem algo informado no edit antes de tentar converter o valor e outra é fazer a conversão dentro de um try except.

 

Exemplo 1: Teste se edit tem valor preenchido:

 

if Trim(Edit1.text) <> EmptyStr then
		 StrToInt(Edit1.text);

Exemplo 2: Usando o try except:

 

try
	StrToInt(Edit1.text);
except
	Showmessage('Ops... ');
end;

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa!, segue o codigo:

procedure TForm1.Edit62Change(Sender: TObject);

begin

if edit62.Text>='0' then

vlrtotalprodutos.Text:=floattostr(strtofloat(edit61.Text)+strtofloat(edit62.Text

)+strtofloat(edit63.Text));

end;

 

nao sei se ta certo mais ta funcinando a soma direitinho quando se esta com valores em todos os edit´s , o problema é esse como poderia fazer para que um identifique o outros que estao sem valores e nao entrem na soma, eu to com 06 edit´s nesta soma

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu já disse acima, terá que testar cada edit antes de converter... sugiro que crie uma procedure e simplesmente deixe todo o código dos testes lá... ai, nos seus onchange, basta chamar a procedure e pronto. Como testar os edits eu já expliquei anteriormente.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Chrnos!

 

nao sei bem ainda como poderia fazer isso!, voçe poderia me mostrar um exemplo usando duas edits na soma? olha só eu até consegui fazer a soma sem da erros quando uma edit estiver vazia ou quando o usuario precisar apagar um valor para por outro, mais ficou muito extenso o codigo da uma olhada como eu fiz.

 

if (edit61.Text='')and(edit62.Text='')and(edit63.Text='')and(edit64.Text='')and(edit65.Text='')and(edit66.Text='') then

vlrtotalprodutos.Text:='';

if (edit61.Text>='0')and(edit62.Text='')and(edit63.Text='')and(edit64.Text='')and(edit65.Text='')and(edit66.Text='') then

vlrtotalprodutos.Text:=floattostr(strtofloat(edit61.Text));

if (edit61.Text>='0')and(edit62.Text>='0')and(edit63.Text='')and(edit64.Text='')and(edit65.Text='')and(edit66.Text='') then

vlrtotalprodutos.Text:=floattostr(strtofloat(edit61.Text)+strtofloat(edit62.Text

));

if (edit61.Text>='0')and(edit62.Text>='0')and(edit63.Text>='0')and(edit64.Text='')and(edit65.Text='')and(edit66.Text='') then

vlrtotalprodutos.Text:=floattostr(strtofloat(edit61.Text)+strtofloat(edit62.Text

)+strtofloat(edit63.Text));

if (edit61.Text>='0')and(edit62.Text>='0')and(edit63.Text>='0')and(edit64.Text='0')and(edit65.Text='')and(edit66.Text='') then

vlrtotalprodutos.Text:=floattostr(strtofloat(edit61.Text)+strtofloat(edit62.Text

)+strtofloat(edit63.Text)+strtofloat(edit64.Text));

if (edit61.Text>='0')and(edit62.Text>='0')and(edit63.Text>='0')and(edit64.Text>='0')and(edit65.Text>='0')and(edit66.Text='') then

 

eu fiz varias sequencias entre os edit´s, tipo assim tao todas as 06 edit´s com valores, mais ai o usuario precisa alterar o valor do edit 03 ou o edit02!

fiz varias sequencias essas ai é so o começo, ta muito grande o codigo, será que posso ter problemas assim?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu disse, use uma função... por exemplo, para dois edits, poderia fazer assim (bem simples):

 

Function TForm1.SomaEdits:string;
var soma : Double;
begin
	soma := 0;
	if Trim(Edit1.text) <> EmptyStr then
	   try
		   soma := StrToFloat(Edit1.text);
	   except
	   end;
	if Trim(Edit2.text) <> EmptyStr then
	   try
		   soma := soma + StrToFloat(Edit2.text);
	   except
	   end;
   result := FloatToStr(soma);
end;

E no Edit seria só chamar a função:

 

procedure TForm1.Edit62Change(Sender: TObject);
begin
	vlrtotalprodutos.Text:= SomaEdits;
end;

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.