GARANTIR DESCONTO

Fórum Formatar casas decimais automaticamente ao estar digitando? #369027

13/03/2009

0

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

Responder

Posts

13/03/2009

Woinch

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


Espero ter ajudado...


Responder

Gostei + 0

13/03/2009

Exvasp

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


Responder

Gostei + 0

13/03/2009

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


Responder

Gostei + 0

13/03/2009

Exvasp

[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


Responder

Gostei + 0

13/03/2009

Carlosrm

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


Responder

Gostei + 0

26/02/2019

Hélio Kuhn

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.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar