如何在Focused属性返回False时找出TCustomControl是否被聚焦?

时间:2013-04-01 19:30:47

标签: delphi focus controls

我们正在使用修改后的TToolWindow97 = class(TCustomControl)组件。

enter image description here

我只能在TForm.Components找到它。 TForm.Controls上没有它。因此,当TForm.ActiveControl关注时,TToolWindow97.Focused = False为零,TToolWindow97TToolWindow97。我需要知道什么时候它是专注的。

我还尝试在Focused = False找到任何专注的控件。但所有人都返回TToolWindow97

TCustomControl属性始终返回Focused时,如何确定False(继承自TToolWindow97)是否重点关注?

P.S。 TToolWindow97窗口在图像上有阴影。只有专注的Focused = False窗口拥有它 - 所以焦点存在。我可以集中精力控制它。但所有人都返回{{1}}。我不知道为什么。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

工具栏按钮没有焦点。在图像中,很明显网格控件具有焦点 - 它具有点状焦点矩形,并且单元格以焦点颜色突出显示。

带有阴影图像的“15”按钮用鼠标指向。它处于“悬停”或“热”状态,而非“焦点”状态。在代码中,状态名称为bsMouseIn,并存储在FState字段中;该字段具有受保护的可见性,不会通过任何公共属性或方法公开。您可能对OnMouseEnterOnMouseExit事件感兴趣。

工具栏按钮很少获得焦点。它们只能用鼠标操作。要使用键盘操作它们,您需要按下相关的快捷键组合。特定的按钮控件TToolbarButton97绝对不会获得焦点,因为它来自TGraphicControl

答案 1 :(得分:0)

1)。当TBToolWindow聚焦时扫描以下句柄而不是:

        aHandle := (Sender as TForm).Handle;
        aHandle := aVisible.Handle;
        aHandle := GetForegroundWindow;
        aHandle := GetActiveWindow;
        aHandle := Screen.ActiveForm.Handle;
        aHandle := Application.ActiveFormHandle;

所以,区别仅在于Screen.ActiveForm.Handle。

2)。安装Microsoft Spy。

3)。将Screen.ActiveForm.Handle转换为HEX并在Spy上找到它们。

4)。看看课程。因此,当TTBToolWindow聚焦时,aHandle的类是TBFloatingWindowParent。

5)。编写代码以通过TBFloatingWindowParent控件查找正确的活动浮动窗口(TTBToolWindow)。