Fórum Formatar TCurrencyEdit para separar o valor inserido com casas deicmais #478608

11/05/2014

0

Boa tarde galera!

Seguinte, não estou conseguindo configurar o CurrencyEdit pra formatar os valores digitados. Alterando o Display Format eu consigo fazer ele mostrar certo a formatação no campo, mas queria fazer com que o usuário não precisasse digitar o "." ou a "," pra separar os valores e sim apenas digitar os valores como inteiro, por exemplo 123, e o próprio componente fizesse a inserção da virgula após o 1. O que acontece só com o Display Format do jeito que tá (0.00;- 0.00) é que quando o usuário digita 123, ele formata pra 123,00 e não é isso que eu preciso...
=x

Se alguém souber como resolver, ficarei mto grata..... faz um tempo que eu tô tentando e não consegui
=/

Tks!
Aurélia Vieira

Aurélia Vieira

Responder

Posts

12/05/2014

Marcos Saffran

[url]https://www.devmedia.com.br/forum/como-auto-incrementar-as-virgulas-e-os-pontos/472980[/url]
Responder

Gostei + 0

12/05/2014

Cauê Nishijima

Tenta o código que criei :

function formataCurrency(texto: string): string;
var
  textoSemFormatacao: string;
  result1, result2 : string;
  i, count :Integer;
begin
    if texto <> '' then
    begin
      for i := 1 to length(texto) do
      begin
        if (Copy(texto,i,1) <> ',') and (Copy(texto,i,1) <> '.') then
          textoSemFormatacao := textoSemFormatacao + Copy(texto,i,1);
      end;

      textoSemFormatacao := IntToStr(StrToInt64(textoSemFormatacao));

      if length(textoSemFormatacao) <= 2 then
      begin
        while length(textoSemFormatacao) < 4 do
        begin
          if length(textoSemFormatacao) = 2 then
            textoSemFormatacao := ',' + textoSemFormatacao
          else
            textoSemFormatacao := '0' + textoSemFormatacao;
        end;
        result := textoSemFormatacao;
      end
      else
      begin
        count := 0;
        for i:=length(textoSemFormatacao) downto (length(textoSemFormatacao)-2) do
        begin
          count := count + 1;
          if count = 3 then
            result1 := copy(textoSemFormatacao,i,1) + ',' + result1
          else
            result1 := copy(textoSemFormatacao,i,1) + result1;
        end;

        count := 0;

        for i:=(length(textoSemFormatacao)-3) downto 1 do
        begin
          count := count + 1;
          if count = 3 then
          begin
            result2 := copy(textoSemFormatacao,i,1) + '.' + result2;
            count := 0;
          end
          else
            result2 := copy(textoSemFormatacao,i,1) + result2;
        end;

        result := result2 + result1;
      end;
    end;
end;



E para utilizar é só colocar no evento KeyUp dos campos que você deseja o seguinte:

  edt1.Text := formataCurrency(edt1.Text);
  edt1.SelStart :=Length(edt1.Text)
Responder

Gostei + 0

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

Aceitar