【问题标题】:Ctrl+Backspace in Delphi ControlsDelphi 控件中的 Ctrl+Backspace
【发布时间】:2012-05-05 13:05:41
【问题描述】:

Ctrl+Backspace 键盘快捷键通常会删除插入符号左侧的单词。但它不适用于您期望的任何标准 Delphi 控件(TEditTMemoTComboBox 等)。有趣的是,Ctrl+Delete 工作得很好。

有人知道如何轻松纠正这种行为吗?

我知道重写 KeyDown 过程可以做到这一点,但这太复杂了,因为必须为每个组件重写 KeyDown

【问题讨论】:

  • 这不是 Delphi 特有的问题。实际上,TEdit 和其他控件只是本机 Microsoft Windows 控件的包装,它们的行为是这样的。例如,尝试使用记事本“选择字体”对话框中的编辑框。在启用自动完成的情况下编辑控件,但是,接受 Ctrl+Backspace 热键。
  • 喜欢雷蒙德said
  • 有趣,我不知道。但这仍然有点烦人,因为快捷方式适用于很多地方,甚至包括 MS 软件。
  • @oxo:我同意,在大多数软件中,这是我真正期待和每天使用的快捷方式。可能标准编辑框默认没有此功能,因为与旧(或行为不端)软件存在一些晦涩和微妙的兼容性问题。仍然有人可能想知道为什么没有一种样式可以用来启用此功能。
  • 对面是RichEdit控件默认实现的快捷方式。

标签: delphi vcl


【解决方案1】:

这不是 Delphi 特有的问题。实际上,TEdit 和其他控件只是本机 Microsoft Windows 控件的包装,它们的行为是这样的。例如,尝试使用记事本“选择字体”对话框中的编辑框。在启用自动完成的情况下编辑控件,但是,接受 Ctrl+Backspace 热键。我认为您可以通过

轻松启用此功能
SHAutoComplete(Edit1.Handle,
  SHACF_AUTOAPPEND_FORCE_OFF or SHACF_AUTOSUGGEST_FORCE_OFF)

(使用ShLwApi)。

【讨论】:

  • +1,我正在写一条评论,你要更改 SHACF_DEFAULT = 0 的标志,你的速度更快。这是实现此功能的最简单方法。
  • @TLama:是的,实际的自动完成可能不是 OP 想要的......不过,我想知道是否没有更好的方法来做到这一点。毕竟,启用“禁用的自动完成”以使 Ctrl+Backspace 热键起作用是没有意义的……
  • 可能还应该添加标志SHACF_FILESYS_ONLY,不是因为它有意义,而是因为文档明确指出“此标志必须与一个或多个 SHACF_FILESYS* 或 SHACF_URL* 结合使用旗帜。”参考我上面使用的标志。
  • 此外,调用 SHAutoComplete 会导致无法在 Edit 的 KeyPress 事件处理程序中检测到“Enter”。你能帮忙评论一下如何解决这个问题吗?
  • 我建议不要使用SHAutoComplete 来启用这些快捷方式。如上所述,有几件事情发生了故障,包括pressing Tab does not do anything
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多