【发布时间】: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