Fórum Como auto incrementar as virgulas e os pontos #472980

14/03/2014

0

Olá Pessoal,

Eu estou utilizando um TEdit e gostaria que enquanto o usuário esteja digitando os numeros ele auto complementa as virgulas e os pontos existe alguma maneira de fazer isso?

Eu imagino que seja no OnChange mais não sei como fazer isso. Eu tentei desta forma:
   edtPrecoVenda1.Text := FormatFloat('#,##0.000', StrToFloat(SoNumeros(edtPrecoVenda1.Text))/1000);


Mais da uma série de erros que não sei como concertar.

Alguem poderia me ajudar porfavor estou precisando muito disso.

Desde já agradecido!
Edson Vilhalba

Edson Vilhalba

Responder

Posts

16/03/2014

Marcos Saffran

Olá Edson,

coloquei em um programa a função abaixo, no evento onkeyup do edit, não me lembro de onde eu a busquei.
procedure TFormContrato.edValorTotalKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var  s: String;

begin
  if (Key in [96..107]) or (Key in [48..57]) then
     begin
      S := edValorTotal.Text;
      S := StringReplace(S,',','',[rfReplaceAll]);
      S := StringReplace(S,'.','',[rfReplaceAll]);
      if Length(s) = 3 then
        begin
          s := Copy(s,1,1)+','+Copy(S,2,15);
          edValorTotal.Text := S;
          edValorTotal.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,15);
            edValorTotal.Text := s;
            edValorTotal.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,15);
              edValorTotal.Text := s;
              edValorTotal.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,15);
                edValorTotal.Text := s;
                edValorTotal.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,15);
                  edValorTotal.Text := s;
                  edValorTotal.SelStart := Length(S);
                end;
      end;
end;
Responder

Gostei + 0

17/03/2014

Edson Vilhalba

Olá Edson,

coloquei em um programa a função abaixo, no evento onkeyup do edit, não me lembro de onde eu a busquei.
procedure TFormContrato.edValorTotalKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var  s: String;

begin
  if (Key in [96..107]) or (Key in [48..57]) then
     begin
      S := edValorTotal.Text;
      S := StringReplace(S,',','',[rfReplaceAll]);
      S := StringReplace(S,'.','',[rfReplaceAll]);
      if Length(s) = 3 then
        begin
          s := Copy(s,1,1)+','+Copy(S,2,15);
          edValorTotal.Text := S;
          edValorTotal.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,15);
            edValorTotal.Text := s;
            edValorTotal.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,15);
              edValorTotal.Text := s;
              edValorTotal.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,15);
                edValorTotal.Text := s;
                edValorTotal.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,15);
                  edValorTotal.Text := s;
                  edValorTotal.SelStart := Length(S);
                end;
      end;
end;


Marcos muito obrigado!! Funcionou perfeitamente!!! Eu só vou dar uma revisada no código que quando apaga o numero ele não volta pro valor anterior dai o unico jeito seria apagar tudo e digitar tudo novamente, você por acaso saberia o que causa isso no código?
Responder

Gostei + 0

17/03/2014

Marcos Saffran

Olá Edson,

a cada key up no edit o valor é substituído, pelo valor da rotina.

Agora não entendi o que você quer dizer, pois quando alguém apaga o valor não é para apagar ou mudar?
Responder

Gostei + 0

18/03/2014

Edson Vilhalba

Olá Edson,

a cada key up no edit o valor é substituído, pelo valor da rotina.

Agora não entendi o que você quer dizer, pois quando alguém apaga o valor não é para apagar ou mudar?


Então Marcos o que eu quis dizer é que derrepente o usuário pode ter digitado 50.000,00 quando queria 5.000,00 ou o usuário digitou 54.400,65 quando queria 54.000,00, então se ele apagar o 65 vai ficar sem os 2 "0" no final, apesar que nesse caso é so utilizar formatfloat que resolve.
Mais sinceramente esse é só um detalhe que não sei se vale a pena investir em fazer ele.
É que assim é meu primeiro sistema e eu não conheço ainda muito bem o modo de uso dos usuário não sei qual a melhor forma de deixar nos campos edit para que o usuário não faça nenhuma besteira então eu ando pensando em todos os detalhes possíveis.
Então pode ser que eu só esteja sendo detalhista demais...
Responder

Gostei + 0

18/03/2014

Marcos Saffran

Olá Edson,

nesses casos, quando digitou 50.000,65 e ele apagar o 65, é só ele digitar os dois zeros que ficará tudo ok.
Responder

Gostei + 0

18/03/2014

Edson Vilhalba

Olá Edson,

nesses casos, quando digitou 50.000,65 e ele apagar o 65, é só ele digitar os dois zeros que ficará tudo ok.


Sim Marcos foi de grande ajuda a sua procedure agradeço muito mesmo!
Responder

Gostei + 0

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

Aceitar