Fórum Formatar casas decimais automaticamente ao estar digitando? #369027
13/03/2009
0
Como formatar casas decimais automaticamente ao estar digitando sem ter que sair do edit?
Por exemplo:
Ao estar digitando 10.950,54 automaticamente a formatação vai sendo feita ao começar dos centavos até chegar no milhar.
se digitei 10 fica 0,10
se digitei 109 fica 1,90
se digitei 1095 fica 10,95
se digitei 10950 fica 109,50
Tipo caixa eletrônico do banco itaú ou da caixa economica sem ter q usar o evento onexit para formatar.
Desde já agradeço a quem puder me ajudar.
Exvasp
Curtir tópico
+ 1Posts
13/03/2009
Woinch
Espero ter ajudado...
Gostei + 0
13/03/2009
Exvasp
Maskedit não ajuda, preciso formatar no momento q digito
Gostei + 0
13/03/2009
Douglas Morette
ex.: lenght(maskedit.text) = 2
maskedit.text = ,00
if length(maskedit.text) = 2 then
maskedit.text := ´,´+maskedit.text;
if lenght(maskedit.text) = 6 then
maskedit.text := ´.´+maskedit.text;
eu não lembro o código de como ir digitando da esquerda para a direita
vlw!!
Gostei + 0
13/03/2009
Exvasp
ex.: lenght(maskedit.text) = 2
maskedit.text = ,00
if length(maskedit.text) = 2 then
maskedit.text := ´,´+maskedit.text;
if lenght(maskedit.text) = 6 then
maskedit.text := ´.´+maskedit.text;
eu não lembro o código de como ir digitando da esquerda para a direita
vlw!![/quote:e3c0aa7da4]
Testei mas não fica em conformidade conforme Eu vou digitando.
Obrigado por tentar ajudar
Gostei + 0
13/03/2009
Carlosrm
veja se isto te ajuda:
(coloquei apenas um edit no form principal de um novo projeto (D7).
Só alterei a propriedade text do edit1 para ´´. (edit1.text := ´´)
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if NOT (Key in [´0´..´9´, 8, 9]) then key := 0; // Note que você não pode digitar a vírgula. end; procedure TForm1.Edit1Change(Sender: TObject); var s : string; v : double; I : integer; begin // 1º: se a edit1 estiver vazia, nada pode ser feito. If (edit1.Text = emptystr) then exit; // 2º: obter o texto da edit1, SEM a virgula e SEM o ponto decimal: s :=´´; for I := 1 to length(edit1.Text) do if (edit1.text[I] in [´0´..´9´]) then s:= s + edit1.text[I]; // 3º: fazer com que o conteúdo da edit1 apresente 2 casas decimais: v := strtofloat(s); v := v /100; // para criar 2 casa decimais //4º: converta o valor obtido (v) para a edit1 novamente. edit1.text := floattostr(v); edit1.SelStart := 0; //OBS: testei no Delphi 7 e até aí funcionou. Note que você também // pode acrescentar números em quaisquer posições, assim // como selecionar e deletar quaisquer pedaços do conteúdo da // edit1. E a digitação se faz da direita para a esquerda // (edit1.selstart := 0). end;
Agora é so compilar e rodar.
Boa sorte. carlosrm
Gostei + 0
26/02/2019
Hélio Kuhn
Como formatar casas decimais automaticamente ao estar digitando sem ter que sair do edit?
Por exemplo:
Ao estar digitando 10.950,54 automaticamente a formatação vai sendo feita ao começar dos centavos até chegar no milhar.
se digitei 10 fica 0,10
se digitei 109 fica 1,90
se digitei 1095 fica 10,95
se digitei 10950 fica 109,50
Tipo caixa eletrônico do banco itaú ou da caixa economica sem ter q usar o evento onexit para formatar.
Desde já agradeço a quem puder me ajudar.
Tente fazer assim, pra mim deu certo, isso é no evento onchange do edit, não esqueça de validar tambem o e evento onkeypress para receber apenas numeros, e no meu caso ativei tambem o backspace
procedure TForm6.Edit1Change(Sender: TObject);
var
i: integer;
c: currency;
s: string;
begin
if Edit1.Text = EmptyStr then
Edit1.Text := '0,00';
for i := 1 to length(Edit1.Text) do
if Edit1.Text[i] in ['0' .. '9'] then
s := s + Edit1.Text[i];
c := strtocurr(s);
c := (c / 100);
Edit1.Text := currtostr(c);
Edit1.SelStart := length(Edit1.Text);;
end;
procedure TForm6.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if NOT(Key in ['0' .. '9', #8]) then
Key := #0;
end;
end.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)
Inserção de url
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.