Formatar casas decimais automaticamente ao estar digitando?
Pessoal é o seguinte:
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.
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
Curtidas 1
Respostas
Woinch
13/03/2009
Já experimentou utilizar o comando EditMask e a propriedade MaskEdit do mesmo?
Espero ter ajudado...
Espero ter ajudado...
GOSTEI 0
Exvasp
13/03/2009
Já experimentou utilizar o comando EditMask e a propriedade MaskEdit do mesmo?
Espero ter ajudado...
Maskedit não ajuda, preciso formatar no momento q digito
GOSTEI 0
Douglas Morette
13/03/2009
quando evento onkeypress é assionado ele verifica o tamanho da string e compara.
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!!
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
Exvasp
13/03/2009
[quote:e3c0aa7da4=´douglas morette´]quando evento onkeypress é assionado ele verifica o tamanho da string e compara.
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
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
Carlosrm
13/03/2009
EXVASP,
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 := ´´)
Agora é so compilar e rodar.
Boa sorte. 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
Hélio Kuhn
13/03/2009
Pessoal é o seguinte:
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.
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