gpt4 book ai didi

forms - 查找嵌入在窗体中的窗体的屏幕位置,嵌入在窗体中,

转载 作者:行者123 更新时间:2023-12-03 18:18:45 24 4
gpt4 key购买 nike

我发现自己处在一个棘手的情况下,我有一个应用程序,其中有一个表单嵌入到一个表单中,嵌入到一个表单中,嵌入到一个表单中......(你得到了图片)。

我试图找到其中一种形式的中间部分(这很简单 (Self.Width div 2) 和 (Self.Height div 2),正确的)。然后是相对于屏幕的位置(这也很简单 (Self.Width div 2) + Self.Left(Self.Height div 2) + Self.Top)

问题是这个表单嵌入了另一个表单所以我得到了(Self.Width div 2) + Self.Left + Self.Parent.Left(Self.Height div 2) + Self.Top + Self.Parent.Top

问题是我有 6 到 8 个表格相互嵌入。我在考虑递归调用;问题是并非所有对象都是表单,它们是表单、选项卡、面板等的混合体。

什么是解决它的优雅方法?

最佳答案

这个怎么样:

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;

或 Remy Lebeau 建议的组合版本:

FUNCTION CenterOfFormAsScreenCoords(F : TForm) : TPoint;
BEGIN
Result:=F.ClientToScreen(Point(F.Width DIV 2,F.Height DIV 2))
END;

和一个更通用的版本(如 Craig Young 所建议的):

FUNCTION GetCenterOfControlAsScreenCoords(C : TControl) : TPoint;
BEGIN
Result:=C.ClientToScreen(Point(C.Width DIV 2,C.Height DIV 2))
END;

或作为类(class)助手:

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;

关于forms - 查找嵌入在窗体中的窗体的屏幕位置,嵌入在窗体中,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21249301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com