You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 10自定义控件的输入光标停止闪烁后如何恢复闪烁效果

问题根因

仅在控件获得焦点时初始化了输入光标,系统内置的光标闪烁计时器走完5秒周期后就会进入常亮状态,单纯调用SetCaretPos移动光标位置不会触发系统重置该闪烁计时器,因此会出现移动光标后光标不再闪烁的问题。

解决方案

不需要调用SetCaretBlinkTime(该API会修改全系统的光标闪烁速率,不符合微软官方文档的使用建议,也不是实现该需求的正确方案)。只需要在每次更新光标位置之后,主动触发系统重置闪烁计时器即可,具体实现为调用SetCaretPos后,依次配对调用HideCaret和ShowCaret,该操作不会改变光标当前的显示状态,同时会重置5秒的闪烁周期,完全匹配系统原生控件的光标行为。

需要修改的代码片段如下:

procedure TEditPane.SetCaretPosition(AXPos : Integer);
begin
  If AXPos < CInsideMargin then
    AXPos := CInsideMargin;

  If AXPos > CInsideMargin + (CCharsPerLine * CCharWidth) then
    AXPos := CInsideMargin + (CCharsPerLine * CCharWidth);

  FCaretPosX := AXPos;
  SetCaretPos(FCaretPosX,CInsideMargin);
  // 新增以下两行重置光标闪烁周期
  HideCaret(Handle);
  ShowCaret(Handle);
end;

内容的提问来源于stack exchange,提问作者Blurry Sterk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:06:04