【问题标题】:Is there a simple way to allow tabbing between non-VCL and VCL controls on a Delphi form?有没有一种简单的方法允许在 Delphi 表单上的非 VCL 和 VCL 控件之间切换?
【发布时间】:2010-12-31 11:35:13
【问题描述】:

我有一个带有一堆 VCL 控件(如 TButton 和 TCheckBox)的 Delphi 表单,以及一个 Scintilla 文本编辑器的实例。我希望能够进入和退出文本编辑器,但看起来标签是由 VCL 库而不是 Windows 处理的。

我单步执行了代码,看起来选项卡是由 TWinControl 类的 SelectNext 和 FindNextControl 方法处理的。这些方法适用于 TWinControl 对象,但文本编辑器不像 TButton 和 TCheckbox 那样来自 TWinControl。

有没有一种简单的方法允许在非 VCL 和 VCL 控件之间切换?

【问题讨论】:

  • 你为 Scintilla 库使用什么包装器?
  • 我不使用包装器。 CreateWindowEx 创建它,SendMessage 与之通信。
  • 为它创建自己的包装类可能是个好主意。它不必公开任何属性或方法。使用 TStaticText 或 TEdit 作为示例,说明如何使用正确的窗口类名称进行 TWinControl 后代调用 CreateWindowEx。你可以通过这种方式免费获得一堆东西,例如对齐、调整大小和制表符。

标签: windows delphi winapi tab-ordering


【解决方案1】:

(将此作为 wiki 答案,因为 Rob 在上面的 cmets 中非常正确,这只是反刍)

特殊字符/键的键盘处理由 VCL 以一种相当特殊的方式处理,直接通过 Win API 绕过/扩展它当然是可行的,但并非易事。

如果您在控件周围创建一个自定义 VCL 组件包装器(使用 VCL 源代码作为指南),从长远来看,这将同样容易而且坦率地说更加灵活,这真的不是那么难(可能有点乏味)但是就可维护性和重用而言,回报将是巨大的。

编辑:

当然,您可以简单地将 free Delphi Wrapper 用于 Scintilla 编辑器。

【讨论】:

    猜你喜欢
    • 2011-05-20
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    相关资源
    最近更新 更多