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