function TMyControl.GetVisibleRect: TRect; var vParent: TWinControl; vRect, vParentRect: TRect; vP: TPoint; begin assert(assigned(Parent)); vRect := BoundsRect; // Le TControl en entier, pas juste ClientRect if assigned(Parent) then begin vParent := Parent; vP := ControlOrigin; vRect.Offset(vP); { On scan tous les Parents } while assigned(vParent) and not (vRect.IsEmpty) do begin vParentRect := vParent.ClientToScreen(vParent.ClientRect); vRect := vRect.Intersect(vRect, vParentRect); vParent := vParent.Parent; end; if not vRect.IsEmpty then vRect.Offset(-vP.X, -vP.y); end; Result := vRect; end;