【发布时间】:2012-01-03 17:21:55
【问题描述】:
我正在构建一个具有多个焦点的自定义控件。例如,在 1 个控件内,假设有 3 个区域(可以定义为画布上的一个矩形)能够获得焦点。根据哪个有焦点,我不希望默认的 Windows 虚线围绕它,而是一些特殊的处理。我什至不知道如何让 1 个自定义控件拥有自己的焦点。
最初的项目是一个单独的 TPanel,上面有几个 VCL 控件,每个控件当然都是自己的窗口,因此有自己的焦点。但现在我将它放入自己的自定义类中,这 3 个控件将不再存在(它们仅在版本 1 中作为原型存在),我现在需要以某种方式模仿这些不同区域的焦点。
我想类似于像 TListBox 这样简单的东西,该控件中的某些项目获得焦点,而不是整个控件本身。
这里有一张图片来帮助展示我正在制作的东西......
顶部的那个是带有按钮的原件。但底部的那个是我正在建造的新的,它都是自定义绘制的。
为了详细说明,我想在重新发明轮子之前看看 Windows 是否已经对这种类型的场景进行了特殊处理。
我不是在寻找“最简单”的方法来实现这一点。而且我也不希望建议恢复到我以前的方式,因为有很多原因我不希望 1 个控件与多个其他控件一起使用。我只需要一个是或否,以及一个解释。
更多
我刚刚意识到主要问题是tab 键的使用。控件必须首先获得焦点,开始关注它应该关注的任何子项,然后在我的命令上响应tab,直到它到达末尾,然后将制表符传递给下一个控件。然后它也需要 shift+tab 。我到底将如何实现这个选项卡?这就是我卡住的地方,但我突然意识到这是我问的主要原因。
【问题讨论】:
-
列表项没有获得焦点(就像键盘焦点的意义),它是有焦点的框。如果是这种情况,您将无法通过按项目的第一个字符来导航项目。项目仅具有被聚焦/选择的视觉指示。不过,您当然可以模拟行为..
-
@SertacAkyuz 那么对于这种情况没有额外的 Windows 处理?我想会是这样,但我不确定 Windows 中是否已经内置了一些特殊的处理例程。
-
不,就操作系统而言,窗口是可以接收键盘焦点的,取决于您如何对其进行分区。不确定它是否与您的问题完全相关,但请参阅“Keyboard Focus and Activation”。
-
我不太确定,但您可以前往here 并在法语大页面中搜索“Navigateur hyperbolique”。它是关于采用焦点和上下文概念的 delphi 组件。
-
我认为是时候提出一个新问题了
标签: delphi focus custom-controls delphi-7