As vezes nos deparamos com hints e warnings que o Delphi retorna para
corrigirmos alguma coisa no fonte que possa causar problema.
E hoje vamos conversar sobre o seguinte warning:
“WideChar reduced to byte char in set expressions. Consider using 'CharInSet'
function in 'SysUtils' unit.”
Que se originou deste código, que é responsável por impedir que seja
digitado qualquer coisa diferente dos números 0 a 9, tecla backspace “chr(8)”
ou espaço “chr(32)”.
if not(Key in ['0' .. '9', chr(8), chr(32) ]) then Key := #0;
Vamos entender o warning: Ele está nos dizendo que a expressão está
convertendo WideChar em Byte char, e sugere que consideremos utilizar a função
“CharInSet” que está na unit “SysUtils” para isto.
A Função “chr” retorna o caractere em ASCII, nesse link tem todos os
caracteres ASCII caso queira entender melhor. https://pt.wikipedia.org/wiki/ASCII.
O “chr” também pode ser substituído por #.
Agora vamos ao "dito cujo" CharInSet.
A função CharInSet foi criada para que o tratamento dos caracteres de
uma coleção fosse feito corretamente. E para utilizá-la devemos chamar a função
e passar como parâmetro a variável que contém a tecla digitada, em seguida os
caracteres que serão analisados. E a nossa rotina ficará assim.
if not (CharInSet(key,['0'..'9', #8, #32 ])) then Key := #0;
Veja que no lugar de Chr alteramos para #, que trará o mesmo resultado.
Dessa forma o warning desaparece e nosso código fica coerente.
Até a próxima.
Nenhum comentário:
Postar um comentário