Erro ShowMessage Doido
Boa noite!!!
Por que está ocorrendo esse erro,
Por que está ocorrendo esse erro,
'Verifique Área Total Não Pode Ser Maior Que Área do Terreno'
fica mostrando essa mensagem sendo que a área total é menor do que á área do terrenoif 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
Curtidas 0
Respostas
Mateus Ribeiro
18/04/2016
Bom dia! Quais valores você está colocando no Edit8 e no Edit2?
GOSTEI 0
Natanael Ferreira
18/04/2016
Você está comparando os valores como texto você precisa realizar a conversão antes.
Troque:
Por:
Troque:
if Edit8.Text > Edit2.Text then
Por:
if StrToFloatDef(Edit8.Text, 0) > StrToFloatDef(Edit2.Text, 0) then
GOSTEI 0
Bruno Henrique
18/04/2016
Boa tarde!!!
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
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
Bruno Henrique
18/04/2016
Boa noite!!!
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
Soma nos edits no evento onchage
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
Natanael Ferreira
18/04/2016
Te aconselho a trocar a sua função para retirar ponto por esta mais simplificada:
E retirar o seu código do evento onChange e colocar no evento OnExit do Edit com estas alterações:
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
Bruno Henrique
18/04/2016
Natanael, boa tarde!!!
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???
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
Natanael Ferreira
18/04/2016
Entendi. Segue abaixo uma função para ir formatando os valores automaticamente ao digitar no edit:
Você pode chamá-la no evento OnKeyUp do Edit:
Assim você pode usar o código que passei antes no OnChange do Edit:
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