Formatar casas decimais automaticamente ao estar digitando?

Delphi

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.


Exvasp

Exvasp

Curtidas 1

Respostas

Woinch

Woinch

13/03/2009

Já experimentou utilizar o comando EditMask e a propriedade MaskEdit do mesmo?


Espero ter ajudado...


GOSTEI 0
Exvasp

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

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!!


GOSTEI 0
Exvasp

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


GOSTEI 0
Carlosrm

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 := ´´)


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

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.
GOSTEI 0
POSTAR