【问题标题】:Delphi Focus Problem seen by Caret插入符号看到的德尔福焦点问题
【发布时间】:2011-01-21 21:17:55
【问题描述】:

我在 Delphi 中编写了一个高级文本编辑器组件(固定宽度、语法高亮等),使用 Windows API 结合 TCanvas 元素,它工作得很好,除了一件事:如果我将焦点设置到另一个同一应用程序中的控件也显示插入符号,例如 TEdit,从我的编辑器组件中窃取焦点,新编辑器的插入符号(例如 TEdit)未显示;相反,插入符号在我的编辑器组件中移动!例如,如果我在新编辑器 (TEdit) 中编写一个字符,它将按预期显示,并且插入符号将在我的组件中向右移动。什么会导致这种情况?我怀疑 Win API 对键盘焦点的处理和 VCL 处理之间存在一些冲突。在我的编辑器组件中,我使用 CreateCaret 来响应 WM_SETFOCUS,并使用 DestroyCaret 来响应 WM_KILLFOCUS。显然,仅当新的编辑控件位于新的模式窗口中时才会出现问题。

【问题讨论】:

  • 没有代码示例只能猜测。可能是您的文本编辑器组件在收到 WM_KILLFOCUS 并实际失去焦点后收到错误的 WM_SETFOCUS 消息。
  • 很遗憾,不是这样......

标签: delphi focus components caret


【解决方案1】:

我在组件的代码中发现了一个小错误。我很抱歉。

【讨论】:

  • 那么请接受一个答案(Loren 的或你的)。这将删除未回答的标志。
  • 我会在四个小时内完成。 (服务器现在不允许我这样做。)
【解决方案2】:

我的第一个想法是您没有收到 WM_KILLFOCUS 消息。我会构建一个诊断程序来告诉你它是否正在发生。

倾向于使用调试器来解决此类问题,我发现在尝试诊断此类交互时,修改标题之类的操作效果更好。

【讨论】:

  • 谢谢,但我很肯定代码已执行。 (我试过用哔声。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
  • 2020-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多