Creo que esta otra está mejor:
Código Delphi
[-]
function DeepControlAtPos2(Parent: TWinControl; Pos: TPoint): TControl;
var
Child: TControl;
begin
Result := Parent.ControlAtPos(Parent.ScreenToClient(Pos), false, true);
Child := Result;
while Assigned(Child) and (Child is TWinControl) do
begin
Child := TWinControl(Child).ControlAtPos(Child.ScreenToClient(Pos), false, true);
if Assigned(Child) then
Result := Child;
end;
end;
La diferencia es que ésta no es recursiva, así que hay menos llamadas a función y menos uso de la pila.
// Saludos