Ver Mensaje Individual
  #5  
Antiguo 21-08-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita