【问题标题】:Determine if a control is showing确定控件是否正在显示
【发布时间】:2021-11-25 22:22:50
【问题描述】:

假设我有一个带有两个标签页的页面控件。第一个工作表上有一个按钮,但活动工作表是第二个工作表。在这种情况下,我如何确定该按钮是否正在显示(例如对用户可见)? 我尝试了按钮的 Showing 属性,但由于某种原因它始终为 True。

更新:为了澄清,我不介意控件是否位于桌面的可见区域之外或被任何其他应用程序的窗口覆盖。

【问题讨论】:

  • 如果第一个工作表是活动工作表,但用户移动窗口以使按钮最终超出桌面的可见区域,该怎么办?
  • 好问题,谢谢。对我来说没关系。

标签: delphi


【解决方案1】:

您可以简单地在 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;

【讨论】:

  • 不需要最后一行。
  • omg,我什至没有尝试检查 TabSheet 的 Visible 属性,我现在感到很惭愧 :) 非常感谢。
  • 应用了 Andreas 的评论,确实不需要最后一行
  • 我想我也可以使用 CanFocus,如果我不关心 Enabled 属性,对吧?
  • @tcxbalage 您可以使用此方法检查 TWinControl 所需的任何属性。
猜你喜欢
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
相关资源
最近更新 更多