How about this one:
FUNCTION CenterOfFormAsScreenCoords(F : TForm) : TPoint;
BEGIN
Result:=F.ClientToScreen(Point(0,0));
Result:=Point(Result.Left+F.Width DIV 2,Result.Top+F.Height DIV 2)
END;
or a combined version, as suggested by Remy Lebeau:
FUNCTION CenterOfFormAsScreenCoords(F : TForm) : TPoint;
BEGIN
Result:=F.ClientToScreen(Point(F.Width DIV 2,F.Height DIV 2))
END;
and a more general version (as suggested by Craig Young):
FUNCTION GetCenterOfControlAsScreenCoords(C : TControl) : TPoint;
BEGIN
Result:=C.ClientToScreen(Point(C.Width DIV 2,C.Height DIV 2))
END;
or as a CLASS HELPER:
TYPE
TControlHelper = CLASS HELPER FOR TControl
FUNCTION CenterAsScreenCoords : TPoint;
END;
FUNCTION TControlHelper.CenterAsScreenCoords : TPoint;
BEGIN
Result:=ClientToScreen(Point(Width DIV 2,Height DIV 2))
END;