Hola gonza.
Debería ser:
Código Delphi
[-]
procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
begin
if not(Upcase(Key) in[#8,'0'..'9','A'..'Z','Ñ','ñ']) then
begin
Key:= #0;
MessageBeep(MB_ICONERROR);
end;
end;
Y para prevenir posibles ingresos erroneos mediante copiado/pegado:
Código Delphi
[-]
procedure TForm1.EditExit(Sender: TObject);
var
i: Integer;
begin
for i:= 1 to Length((Sender as TEdit).Text) do
if not(Upcase((Sender as TEdit).Text[i]) in [#8,'0'..'9','A'..'Z','Ñ','ñ']) then
begin
MessageBeep(MB_ICONERROR);
(Sender as TEdit).SetFocus;
end;
end;
Saludos.