Quando alguém esta  digitando  algum valor que  posteriormente será utilizado para calculo alguns cuidados são necessários, esse  procedimento  ValidaKey  deve ser ligado no OnChange do TDBEdit para checar qual  foi a tecla digitada.
procedure ValidaKey(Const Sender:TObject; var  key: char);
begin
       if not(key in ['0'..'9','.',',',#8,#13])  then key := #0;
       if key in [',','.'] then key :=  DecimalSeparator;
       if key = DecimalSeparator then
                  if pos(key,TEdit(Sender).Text)  <> 0 then key := #0;
end;
       if not(key in ['0'..'9','.',',',#8,#13])  then key := #0;
Se algum numero, ponto, virgula, BackSpace ou  Enter for digitado então pode passar normalmente, caso contrario a tecla  pressionada é ignorada.
       if key in [',','.'] then key :=  DecimalSeparator;
Se ponto ou virgula, assume como separador  decimal.
        if key = DecimalSeparator  then
          if pos(key,TEdit(Sender).Text)  <> 0 then key := #0;
O separador decimal so pode ser digitado uma  unica vez, na tentativa de uma segunda digitação ignora-se o símbolo.
Observem que o mais importante aqui é o conceito  utilizado, o fato de se interceptar os caracteres digitados pelo usuário e poder  filtrar esses caracteres para evitar uma entrada de  dados inconsistente. O  exemplo de numero e símbolos não é conclusivo, uma vez que o mesmo efeito  poderia ter sido obtido com a aplicação de uma mascara.
Nenhum comentário:
Postar um comentário