我如何知道表单是不是悬停在组件上?

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;

【讨论】:

哦。谢谢!我很感激。

以上是关于我如何知道表单是不是悬停在组件上?的主要内容,如果未能解决你的问题,请参考以下文章

Web 表单上帮助文本的可访问性最佳实践

如何在服务中初始化响应式表单而不是注入到组件中

在 XP 上,如何让工具提示出现在半透明表单上方?

如何知道我的鼠标在GWT中悬停的是哪个组件? [JAVA]

在视图组件或局部视图中使用表单

创建“非可视”.NET 用户控件