Delphi 如何知道窗体是否悬停在组件上?

Delphi 如何知道窗体是否悬停在组件上?,delphi,forms,components,Delphi,Forms,Components,我需要知道一个(移动的)表单是否在组件上悬停(可能是MouseEnter和MouseLeave之类没有鼠标的东西) 我有这样一个想法,即获取组件的左侧、顶部、高度和宽度,并计算(移动)窗体的位置是否在窗体的位置内。(我不太清楚我该怎么做) 对我的想法有什么建议吗?有没有其他方法可以做到这一点?试试这样的方法: var P: TPoint; R1, R2, I: TRect; begin P := TheComponent.ClientOrigin; R1 := TheComp

我需要知道一个(移动的)表单是否在组件上悬停(可能是MouseEnter和MouseLeave之类没有鼠标的东西)

我有这样一个想法,即获取组件的左侧、顶部、高度和宽度,并计算(移动)窗体的位置是否在窗体的位置内。(我不太清楚我该怎么做)


对我的想法有什么建议吗?有没有其他方法可以做到这一点?

试试这样的方法:

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;

试着这样做:

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;

你是否假设设置了“拖动时显示窗口内容”选项?@Rob:对不起,我不知道这是什么。(我试着在谷歌上搜索,但结果都是“显示窗口…”问题)在它周围加上引号,然后再次搜索。或者浏览“显示属性”控制面板(在“效果”下)。哦,我现在看到了。是的,我假设设置了“拖动时显示窗口内容”。这是一件坏事吗?我想这取决于你为什么认为你需要其他窗口来知道当前拖动的表单在哪里。如果关闭该设置,则程序将无法观察到窗体被拖动到某处。表单将在一个地方,然后它将突然在另一个地方。您是否假设设置了“拖动时显示窗口内容”选项?@Rob:对不起,我不知道这是什么。(我试着在谷歌上搜索,但结果都是“显示窗口…”问题)在它周围加上引号,然后再次搜索。或者浏览“显示属性”控制面板(在“效果”下)。哦,我现在看到了。是的,我假设设置了“拖动时显示窗口内容”。这是一件坏事吗?我想这取决于你为什么认为你需要其他窗口来知道当前拖动的表单在哪里。如果关闭该设置,则程序将无法观察到窗体被拖动到某处。表格会在一个地方,然后它会突然在另一个地方。噢。非常感谢。我很感激。非常感谢。我很感激。