Este codigo es de saiyine,
en la cadena CAD eliges lo que pondrás, (en el ejemplo es para un edit hexadecimal)
En tu caso sería
Me parece bastante util en tiempo real, pones el procedimiento en OnChange y evitas los pillos pegados y validaciones posteriores.
Código Delphi
[-]
procedure TForm1.FiltroEdit(Sender: TObject);
var
i : integer;
aux,aux2,cad : string;
begin
cad:='0123456789abcdefABCDEF';
aux2:='';
with (Sender as TEdit) do
begin
aux:=text;
for i:=1 to length(aux) do
if pos(aux[i],cad)>0 then aux2:=aux2+aux[i];
text:=aux2;
SelStart:=length(aux2);
end;
end;
Saludos