Ya Roman ha explicado muy bien el porque usar el operador as/is en estos casos (recordá que el método Label1Click podrías asignarlo a componentes de diferentes clases en tiempo de ejecución, e incluso invocarlo desde código. Que pasa si a un futuro programador que está dando mantenimiento a tu código se le ocurre hacer esto:
Código Delphi
[-]
Label1Click(Button1); Label1Click(nil);
Solo para terminar de molestar un poco... he podido comprobar que el método CanFocus puede decirnos true, y de todas formas ocurrir un error al intentar establecer el foco, así que para terminar de "molestar" en terminos de Fede:
Código Delphi
[-]
procedure TForm.LabelClick(Sender: TObject);
begin
if assigned(Sender) and (Sender is TLabel) then
with Sender as TLabel do
if Assigned(FocusControl) and FocusControl.CanFocus then
try
FocusControl.SetFocus;
except
on EInvalidOp do
; end;
end;
Hasta luego.