dorgi 0 Denunciar post Postado Abril 30, 2009 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
Chrnos 30 Denunciar post Postado Maio 1, 2009 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
dorgi 0 Denunciar post Postado Maio 1, 2009 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
Chrnos 30 Denunciar post Postado Maio 2, 2009 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
dorgi 0 Denunciar post Postado Maio 2, 2009 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
Chrnos 30 Denunciar post Postado Maio 4, 2009 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
dorgi 0 Denunciar post Postado Maio 6, 2009 Chrnos vlw maninho!, ficou show de bola reduzi pra caramba! muito obrigado mesmo. Abraço! Compartilhar este post Link para o post Compartilhar em outros sites