用插入符号看Delphi焦点问题

用插入符号看Delphi焦点问题,delphi,focus,components,caret,Delphi,Focus,Components,Caret,我已经用Delphi编写了一个高级文本编辑器组件(固定宽度、语法突出显示等),使用Windows API结合TCanvas元素,它工作得很好,除了一件事:如果我将焦点设置为同一应用程序中的另一个控件,该控件也显示插入符号,例如TEdit,则会从编辑器组件中窃取焦点,新编辑器(如TEdit)的插入符号不显示;相反,插入符号在我的编辑器组件中移动!例如,如果我在新编辑器(TEdit)中写入一个字符,它将按预期显示,插入符号将在组件中向右移动。这是什么原因造成的?我怀疑WinAPI对键盘焦点的处理和V

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

我的第一个想法是您没有收到WM\u KILLFOCUS消息。我会构造一个诊断来告诉你它是否正在发生


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

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

谢谢,但我确信代码已执行。(我试过用beep)没有代码示例,人们只能猜测。可能是您的文本编辑器组件在收到WM_KILLFOCUS并实际失去焦点后收到错误的WM_SETFOCUS消息。不幸的是,不是这样……然后请接受答案(Loren的或您的)。这将消除未应答的信号。我将在四小时内完成。(服务器现在不允许我这样做。)