What about:
Form.ScreenToClient(Control.ClientToScreen(Control.BoundsRect.TopLeft));
This is how I would do it, too.
However,
Control.BoundsRect.TopLeft is the control's position within its
Parent's client area. The coordinates provided to
ClientToScreen() need to be within the client area of the control that it is being called on.
So, to use
BoundsRect, you would need to call
ClientToScreen() on the
Parent instead:
Form.ScreenToClient(Control.Parent.ClientToScreen(Control.BoundsRect.TopLeft));
Otherwise, use the control's
ClientRect instead when calling
ClientToScreen() on the control itself:
Form.ScreenToClient(Control.ClientToScreen(Control.ClientRect.TopLeft));
Or simpler:
Form.ScreenToClient(Control.ClientToScreen(Point(0,0)));