Fórum Erro ShowMessage Doido #551786
18/04/2016
0
Por que está ocorrendo esse erro,
if Edit8.Text > Edit2.Text then
ShowMessage('Verifique Área Total Não Pode Ser Maior Que Área do Terreno')
else
//if StrToFloatDef(Edit8.Text,0) = 0 then
//Edit8.Text:= '0,00'
//else
if StrToFloatDef(Edit8.Text,0) > 70 then
begin
Edit10.Text:= FormatFloat(',0.00',(StrToFloatDef(Edit8.Text,0)) * porcento * valorprojeto);
end;
Edit2.SetFocus;Bruno Henrique
Curtir tópico
+ 0Posts
19/04/2016
Mateus Ribeiro
Gostei + 0
19/04/2016
Natanael Ferreira
Troque:
if Edit8.Text > Edit2.Text then
Por:
if StrToFloatDef(Edit8.Text, 0) > StrToFloatDef(Edit2.Text, 0) then
Gostei + 0
19/04/2016
Bruno Henrique
Matteusin - O Valor do edit8.text é a soma de 4 outros edits e o valor do edit2.text é o valor total do terreno. Tirei um print mais não está dando certo de enviar a imagem
Natanael Ferreira - Vou tentar fazer a conversão e falo se deu certo
Obrigado
Gostei + 0
20/04/2016
Bruno Henrique
Resolveu era esse mesmo o problema, faltou fazer a conversão!!!
Agora tenho outra dúvida!!!
Uso essa rotina para retirar os pontos dos meus edits, por que estava dando erro de point floating.
Mais quando coloco a rotina de soma no evento onchange do edit ele da erro, não consigo digitar da esquerda para a direita quando vou digitar ele sai da esquerda para a direita.
Eu digitei 234 no edit saiu 342
Voces sabem como eu consigo resolver
Função para retirar os pontos
function RetirarPonto(strSrc: string): string; var StrAux: string; i: integer; FlagFim: boolean; begin i := 1; FlagFim := false; StrAux := StrSrc; while (not FlagFim) do begin if StrAux[i] = '.' then begin Delete(StrAux, i, 1); end else begin i := i + 1; end; if i > length(StrAux) then flagFIm := true; end; RetirarPonto := StrAux; end;
Soma nos edits no evento onchage
procedure TFrmCadProjetosAmpliacao.Edit7Change(Sender: TObject);
begin
Edit7.Text := FormatFloat(',0.00', StrToFloat(RetirarPonto(Edit7.Text)));
Edit8.Text:= FormatFloat(',0.00',(StrToFloat(RetirarPonto(Edit4.Text)) + StrToFloat(RetirarPonto(Edit5.Text)) + StrToFloat(RetirarPonto(Edit6.Text)) + StrToFloat(RetirarPonto(Edit7.Text))));
porcento := 0.008;
valorprojeto := 900;
menorquesetenta := 70;
if StrToFloatDef(Edit7.Text,0) = 0 then
Edit14.Text:= '0,00'
else
if StrToFloatDef(Edit7.Text,0) < 70 then
Edit14.Text:= FormatFloat(',0.00',menorquesetenta * porcento * valorprojeto)
else
Edit14.Text:= FormatFloat(',0.00',(StrToFloat(RetirarPonto(Edit7.Text))) * porcento * valorprojeto);
end;Gostei + 0
20/04/2016
Natanael Ferreira
function RetirarPonto(strSrc: string): string; begin Result := StringReplace(strSrc, '.', '', [rfReplaceAll]) end;
E retirar o seu código do evento onChange e colocar no evento OnExit do Edit com estas alterações:
procedure TFrmCadProjetosAmpliacao.Edit7Exit(Sender: TObject);
var
porcento, valorprojeto, menorquesetenta: Double;
begin
Edit7.Text := FormatFloat(',0.00', StrToFloatDef(RetirarPonto(Edit7.Text), 0));
Edit8.Text := FormatFloat(',0.00', (StrToFloatDef(RetirarPonto(Edit4.Text), 0) +
StrToFloatDef(RetirarPonto(Edit5.Text), 0) +
StrToFloatDef(RetirarPonto(Edit6.Text), 0) +
StrToFloatDef(RetirarPonto(Edit7.Text), 0)));
porcento := 0.008;
valorprojeto := 900;
menorquesetenta := 70;
if StrToFloatDef(Edit7.Text, 0) = 0 then
Edit14.Text := '0,00'
else if StrToFloatDef(Edit7.Text, 0) < 70 then
Edit14.Text := FormatFloat(',0.00', menorquesetenta * porcento * valorprojeto)
else
Edit14.Text := FormatFloat(',0.00', (StrToFloatDef(RetirarPonto(Edit7.Text), 0)) * porcento * valorprojeto);
end;Gostei + 0
20/04/2016
Bruno Henrique
O código está no onexit, mais eu queria fazer no onchange porque no onexit se o cliente digitar um valor errado no edit4.text e voltar e clicar no edit4.text para corrigir o valor ele vai ter que ir dando tab nos outros edits para o valor aparecer correto no valor total, isso corre o risco de não acontecer se o cliente não dar tab.
Mais nem sei como faço!!!
P.S. Estou tentando enviar print mais não quer dar certo, acho que tá com algum problema!!!
Tem alguma solução???
Gostei + 0
20/04/2016
Natanael Ferreira
procedure FormataValor(Edit: TEdit; var Key: Word);
var
s: String;
begin
if (Key in [96 .. 107]) or (Key in [48 .. 57]) then
begin
s := Edit.Text;
s := StringReplace(s, ',', '', [rfReplaceAll]);
s := StringReplace(s, '.', '', [rfReplaceAll]);
case Length(s) of
3:
begin
s := Copy(s, 1, 1) + ',' + Copy(s, 2);
Edit.Text := s;
Edit.SelStart := Length(s);
end;
4 .. 5:
begin
s := Copy(s, 1, Length(s) - 2) + ',' + Copy(s, Length(s) - 1);
Edit.Text := s;
Edit.SelStart := Length(s);
end;
6 .. 8:
begin
s := Copy(s, 1, Length(s) - 5) + '.' + Copy(s, Length(s) - 4, 3) + ',' +
Copy(s, Length(s) - 1);
Edit.Text := s;
Edit.SelStart := Length(s);
end;
9 .. 11:
begin
s := Copy(s, 1, Length(s) - 8) + '.' + Copy(s, Length(s) - 7, 3) + '.' +
Copy(s, Length(s) - 4, 3) + ',' + Copy(s, Length(s) - 1);
Edit.Text := s;
Edit.SelStart := Length(s);
end;
12 .. 14:
begin
s := Copy(s, 1, Length(s) - 11) + '.' + Copy(s, Length(s) - 10, 3) + '.' +
Copy(s, Length(s) - 7, 3) + '.' + Copy(s, Length(s) - 4, 3) + ',' +
Copy(s, Length(s) - 1);
Edit.Text := s;
Edit.SelStart := Length(s);
end;
end;
end;
end;Você pode chamá-la no evento OnKeyUp do Edit:
FormataValor(TEdit(Sender), Key);
Assim você pode usar o código que passei antes no OnChange do Edit:
var
porcento, valorprojeto, menorquesetenta: Double;
begin
Edit8.Text := FormatFloat(',0.00', (StrToFloatDef(RetirarPonto(Edit4.Text),
0) + StrToFloatDef(RetirarPonto(Edit5.Text), 0) + StrToFloatDef(RetirarPonto(Edit6.Text),
0) + StrToFloatDef(RetirarPonto(Edit7.Text), 0)));
porcento := 0.008;
valorprojeto := 900;
menorquesetenta := 70;
if StrToFloatDef(Edit7.Text, 0) = 0 then
Edit14.Text := '0,00'
else if StrToFloatDef(Edit7.Text, 0) < 70 then
Edit14.Text := FormatFloat(',0.00', menorquesetenta * porcento * valorprojeto)
else
Edit14.Text := FormatFloat(',0.00', (StrToFloatDef(RetirarPonto(Edit7.Text), 0)) * porcento *
valorprojeto);
end;Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)