确定控件是否正在显示

Determine if a control is showing

假设我有一个带有两个选项卡的页面控件sheet。第一个 sheet 上有一个按钮,但第二个 sheet 是活动的。在这种情况下,我如何确定该按钮是否显示(例如对用户可见)? 我尝试了按钮的显示 属性,但由于某种原因它总是 True。

更新: 澄清一下,我不介意控件是否在桌面的可见区域之外或被任何其他应用程序的 window.

您可以简单地在 VCL 树中向上移动,直到找到一个不可见的元素,或者您没有其他父元素可供检查。

function IsVisible(Obj:TWinControl):boolean;
begin
  Result:=Obj.Visible;
  if not Obj.Visible then Exit;

  while Obj.HasParent do
  begin
    Obj:=Obj.Parent;
    Result:=Obj.Visible;
    if not Result then Exit;
  end;
end;