Como auto incrementar as virgulas e os pontos
Olá Pessoal,
Eu estou utilizando um TEdit e gostaria que enquanto o usuário esteja digitando os numeros ele auto complementa as virgulas e os pontos existe alguma maneira de fazer isso?
Eu imagino que seja no OnChange mais não sei como fazer isso. Eu tentei desta forma:
Mais da uma série de erros que não sei como concertar.
Alguem poderia me ajudar porfavor estou precisando muito disso.
Desde já agradecido!
Eu estou utilizando um TEdit e gostaria que enquanto o usuário esteja digitando os numeros ele auto complementa as virgulas e os pontos existe alguma maneira de fazer isso?
Eu imagino que seja no OnChange mais não sei como fazer isso. Eu tentei desta forma:
edtPrecoVenda1.Text := FormatFloat('#,##0.000', StrToFloat(SoNumeros(edtPrecoVenda1.Text))/1000);
Mais da uma série de erros que não sei como concertar.
Alguem poderia me ajudar porfavor estou precisando muito disso.
Desde já agradecido!
Edson Vilhalba
Curtidas 0
Respostas
Marcos Saffran
14/03/2014
Olá Edson,
coloquei em um programa a função abaixo, no evento onkeyup do edit, não me lembro de onde eu a busquei.
coloquei em um programa a função abaixo, no evento onkeyup do edit, não me lembro de onde eu a busquei.
procedure TFormContrato.edValorTotalKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var s: String;
begin
if (Key in [96..107]) or (Key in [48..57]) then
begin
S := edValorTotal.Text;
S := StringReplace(S,',','',[rfReplaceAll]);
S := StringReplace(S,'.','',[rfReplaceAll]);
if Length(s) = 3 then
begin
s := Copy(s,1,1)+','+Copy(S,2,15);
edValorTotal.Text := S;
edValorTotal.SelStart := Length(S);
end
else
if (Length(s) > 3) and (Length(s) < 6) then
begin
s := Copy(s,1,length(s)-2)+','+Copy(S,length(s)-1,15);
edValorTotal.Text := s;
edValorTotal.SelStart := Length(S);
end
else
if (Length(s) >= 6) and (Length(s) < 9) then
begin
s := Copy(s,1,length(s)-5)+'.'+Copy(s,length(s)-4,3)+','+Copy(S,length(s)-1,15);
edValorTotal.Text := s;
edValorTotal.SelStart := Length(S);
end
else
if (Length(s) >= 9) and (Length(s) < 12) then
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,15);
edValorTotal.Text := s;
edValorTotal.SelStart := Length(S);
end
else
if (Length(s) >= 12) and (Length(s) < 15) then
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,15);
edValorTotal.Text := s;
edValorTotal.SelStart := Length(S);
end;
end;
end;GOSTEI 0
Edson Vilhalba
14/03/2014
Olá Edson,
coloquei em um programa a função abaixo, no evento onkeyup do edit, não me lembro de onde eu a busquei.
coloquei em um programa a função abaixo, no evento onkeyup do edit, não me lembro de onde eu a busquei.
procedure TFormContrato.edValorTotalKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var s: String;
begin
if (Key in [96..107]) or (Key in [48..57]) then
begin
S := edValorTotal.Text;
S := StringReplace(S,',','',[rfReplaceAll]);
S := StringReplace(S,'.','',[rfReplaceAll]);
if Length(s) = 3 then
begin
s := Copy(s,1,1)+','+Copy(S,2,15);
edValorTotal.Text := S;
edValorTotal.SelStart := Length(S);
end
else
if (Length(s) > 3) and (Length(s) < 6) then
begin
s := Copy(s,1,length(s)-2)+','+Copy(S,length(s)-1,15);
edValorTotal.Text := s;
edValorTotal.SelStart := Length(S);
end
else
if (Length(s) >= 6) and (Length(s) < 9) then
begin
s := Copy(s,1,length(s)-5)+'.'+Copy(s,length(s)-4,3)+','+Copy(S,length(s)-1,15);
edValorTotal.Text := s;
edValorTotal.SelStart := Length(S);
end
else
if (Length(s) >= 9) and (Length(s) < 12) then
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,15);
edValorTotal.Text := s;
edValorTotal.SelStart := Length(S);
end
else
if (Length(s) >= 12) and (Length(s) < 15) then
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,15);
edValorTotal.Text := s;
edValorTotal.SelStart := Length(S);
end;
end;
end;Marcos muito obrigado!! Funcionou perfeitamente!!! Eu só vou dar uma revisada no código que quando apaga o numero ele não volta pro valor anterior dai o unico jeito seria apagar tudo e digitar tudo novamente, você por acaso saberia o que causa isso no código?
GOSTEI 0
Marcos Saffran
14/03/2014
Olá Edson,
a cada key up no edit o valor é substituído, pelo valor da rotina.
Agora não entendi o que você quer dizer, pois quando alguém apaga o valor não é para apagar ou mudar?
a cada key up no edit o valor é substituído, pelo valor da rotina.
Agora não entendi o que você quer dizer, pois quando alguém apaga o valor não é para apagar ou mudar?
GOSTEI 0
Edson Vilhalba
14/03/2014
Olá Edson,
a cada key up no edit o valor é substituído, pelo valor da rotina.
Agora não entendi o que você quer dizer, pois quando alguém apaga o valor não é para apagar ou mudar?
a cada key up no edit o valor é substituído, pelo valor da rotina.
Agora não entendi o que você quer dizer, pois quando alguém apaga o valor não é para apagar ou mudar?
Então Marcos o que eu quis dizer é que derrepente o usuário pode ter digitado 50.000,00 quando queria 5.000,00 ou o usuário digitou 54.400,65 quando queria 54.000,00, então se ele apagar o 65 vai ficar sem os 2 "0" no final, apesar que nesse caso é so utilizar formatfloat que resolve.
Mais sinceramente esse é só um detalhe que não sei se vale a pena investir em fazer ele.
É que assim é meu primeiro sistema e eu não conheço ainda muito bem o modo de uso dos usuário não sei qual a melhor forma de deixar nos campos edit para que o usuário não faça nenhuma besteira então eu ando pensando em todos os detalhes possíveis.
Então pode ser que eu só esteja sendo detalhista demais...
GOSTEI 0
Marcos Saffran
14/03/2014
Olá Edson,
nesses casos, quando digitou 50.000,65 e ele apagar o 65, é só ele digitar os dois zeros que ficará tudo ok.
nesses casos, quando digitou 50.000,65 e ele apagar o 65, é só ele digitar os dois zeros que ficará tudo ok.
GOSTEI 0
Edson Vilhalba
14/03/2014
Olá Edson,
nesses casos, quando digitou 50.000,65 e ele apagar o 65, é só ele digitar os dois zeros que ficará tudo ok.
nesses casos, quando digitou 50.000,65 e ele apagar o 65, é só ele digitar os dois zeros que ficará tudo ok.
Sim Marcos foi de grande ajuda a sua procedure agradeço muito mesmo!
GOSTEI 0