Campo valor igual aos bancos
Gostaria de saber como consigo o efeito de digitacao igual aos campos de valores nas paginas de banco.
Onde eu nao preciso digitar a virgula para ser entendido por exemplo:
se digitar: 234770 - o sistema automaticamente entende e formata para: 2.347,70
se digitar: 10000 - o sistema formata para: 100,00
ou seja, eu nao digito "."(ponto) ou ","(virgula)... apenas os caracteres numericos, e o sistema, ao ser digitado, vai formatando o campo para #,##0.00, aos olhos do usuario...
Augusto Leao
Curtidas 0
Respostas
Rodrigo Mourão
11/09/2009
Olá Amigo,
Deixa ver se entendi, você quer formatar conforme vai digitando? Seria isso ?
Pois temos a propriedade mask ou até mesmo um formatfloat.
Fico no aguardo !!
ABS!
Deixa ver se entendi, você quer formatar conforme vai digitando? Seria isso ?
Pois temos a propriedade mask ou até mesmo um formatfloat.
Fico no aguardo !!
ABS!
GOSTEI 0
Augusto Leao
11/09/2009
Na verdade você vai digitando o valor na campo, ele automaticamente vai formatando o campo.
você nao precisa digitar "." ou ","
Ele mesmo entende que se digitar R$ 2000, será formatado para 20,00.
Do jeito que esta hoje, se eu digitar 2000, fica formatado 2.000,00 pq a mascara esta definida como #,##0.00.
Se eu digitar 235263 ficará formatado para 235.263,00, qdo eu gostaria que ele fosse formatando conforme digitado. E o valor correto seria 2.352,63 e nao 235.263,00 como esta ficando qdo vou digitando.
é só entrar no site do banco do brasil ou bradesco PJ, digitar o valor...
Outra coisa...
Onde eu coloco GENERATOR no CLIENTDATASET???
GOSTEI 0
Rodrigo Mourão
11/09/2009
Ok, Entendi.
Eu entrei no Banco do Brasil e peguei o codigo JvaScript que vai aquilo. Vou tentar convertê-lo para Delphi para tentar o mesmo efeito, não garanto o sucesso mas vamos tentar.
Peço que aguarde o envio do código.
Abs!!
P.S.: Quanto a dúvida do CDS peço que abra um novo chamado, cada dúvida deve ser respondida em um chamado exclusivo.
Eu entrei no Banco do Brasil e peguei o codigo JvaScript que vai aquilo. Vou tentar convertê-lo para Delphi para tentar o mesmo efeito, não garanto o sucesso mas vamos tentar.
Peço que aguarde o envio do código.
Abs!!
P.S.: Quanto a dúvida do CDS peço que abra um novo chamado, cada dúvida deve ser respondida em um chamado exclusivo.
GOSTEI 0
Rodrigo Mourão
11/09/2009
Segue função.
Não ficou muito bonita não mas funciona. Selecione o Edit que vc quer aplicar a formatação e no evento OnKeyUp coloque o codigo abaixo:
var
s: String;
begin
if (Key in [96..107]) or (Key in [48..57]) then
begin
S := Edit1.Text;
S := StringReplace(S,',','',[rfReplaceAll]);
S := StringReplace(S,'.','',[rfReplaceAll]);
if Length(s) = 3 then
begin
s := Copy(s,1,1)+','+Copy(S,2);
Edit1.Text := S;
Edit1.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);
Edit1.Text := s;
Edit1.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);
Edit1.Text := s;
Edit1.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);
Edit1.Text := s;
Edit1.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);
Edit1.Text := s;
Edit1.SelStart := Length(S);
end;
end;
Ele formata ate Bilhão, ou seja, 125.656.698.874,20 caso queria comtemplar mais digitos e so alterar a rotina e colocar mais um if.
Espero ter ajudado.
Abs!!
Não ficou muito bonita não mas funciona. Selecione o Edit que vc quer aplicar a formatação e no evento OnKeyUp coloque o codigo abaixo:
var
s: String;
begin
if (Key in [96..107]) or (Key in [48..57]) then
begin
S := Edit1.Text;
S := StringReplace(S,',','',[rfReplaceAll]);
S := StringReplace(S,'.','',[rfReplaceAll]);
if Length(s) = 3 then
begin
s := Copy(s,1,1)+','+Copy(S,2);
Edit1.Text := S;
Edit1.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);
Edit1.Text := s;
Edit1.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);
Edit1.Text := s;
Edit1.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);
Edit1.Text := s;
Edit1.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);
Edit1.Text := s;
Edit1.SelStart := Length(S);
end;
end;
Ele formata ate Bilhão, ou seja, 125.656.698.874,20 caso queria comtemplar mais digitos e so alterar a rotina e colocar mais um if.
Espero ter ajudado.
Abs!!
GOSTEI 0
Augusto Leao
11/09/2009
teste, e funcionou em parte...
por exemplo, se eu digitar 98 ele nao traz as casas decimais (98,00), fica 98
e isso para qualquer valor sem o (zero)...
exemplos:
78 - deveria ficar 78,00 e fica 78 ( no campo texto)
65 - deveria ficar 65,00 e fica 65 ( no campo texto)
45 - deveria ficar 45,00 e fica 45 ( no campo texto)
GOSTEI 0
Rodrigo Mourão
11/09/2009
Amigo eu fiz a rotina igual esta no banco, tem que gitiar os centavos, ou seja, se voce quer 98,00 digite 9800.
abs!!
abs!!
GOSTEI 0
Augusto Leao
11/09/2009
Beleza, isso é um detalhe....
Fecha este chamado. Obrigado pela consultoria...
Vou abrir um outro sobre localizacao de campo ja existente no banco..
gostaria que vc me respondesse bem rapidim...
abcs
GOSTEI 0
Augusto Leao
11/09/2009
Amigo, desculpa reabrir aqui. Mas eu fui fazer um teste em valor = 1000,00 ele nao aceita... Ou seja, dou um ENTER ele nao sai do campo...
GOSTEI 0
Rodrigo Mourão
11/09/2009
Aqui funcionou,
Não digite as virgulas. Digite 100000 para ele formatar para 1000,00
Abs!!
Não digite as virgulas. Digite 100000 para ele formatar para 1000,00
Abs!!
GOSTEI 0