我如何知道表单是不是悬停在组件上?
Posted
技术标签:
【中文标题】我如何知道表单是不是悬停在组件上?【英文标题】:How do I know if a Form is hovering over a component?我如何知道表单是否悬停在组件上? 【发布时间】:2011-04-03 13:00:57 【问题描述】:我需要知道一个(移动的)表单是否悬停在一个组件上(可能是没有鼠标的 MouseEnter 和 MouseLeave)。
我有这样的想法,即获取组件的左、上、高、宽,并计算(移动)表单的位置是否在表单的位置内。 (我不确定我该怎么做)
对实施我的想法有什么建议吗?有没有其他方法可以做到这一点?
【问题讨论】:
您是否假设设置了“拖动时显示窗口内容”选项? @Rob:对不起,我不知道那是什么。 (我试过用谷歌搜索,但结果是各种“显示窗口..”问题) 在它周围加上引号并再次搜索。或者探索“显示属性”控制面板(在“效果”下)。 哦,我现在明白了。是的,我假设设置了“拖动时显示窗口内容”。这是一件坏事吗? 取决于你为什么认为你需要其他窗口来知道当前拖动的表单在哪里,我猜。如果设置被关闭,那么程序将无法观察到被拖动到某处的表单。表格会在一个地方,然后它会突然在另一个地方。 【参考方案1】:试试这样的:
var
P: TPoint;
R1, R2, I: TRect;
begin
P := TheComponent.ClientOrigin;
R1 := TheComponent.ClientRect;
Windows.OffsetRect(R1, P.X, P.Y);
P := TheForm.ClientOrigin;
R2 := TheForm.ClientRect;
Windows.OffsetRect(R2, P.X, P.Y);
if Windows.IntersectRect(I, R1, R2) then
// the Form is over the component
else
// the Form is not over the component
end;
【讨论】:
哦。谢谢!我很感激。以上是关于我如何知道表单是不是悬停在组件上?的主要内容,如果未能解决你的问题,请参考以下文章