【问题标题】:How to use custom cursor in window non-client area using Delphi如何使用Delphi在窗口非客户区使用自定义光标
【发布时间】:2014-12-24 13:12:30
【问题描述】:

我有自定义 Delphi VCL 控件,它拦截 WM_NCHITTEST 消息并返回 HTCAPTION 以使控件在其父窗口上可移动。

这部分工作正常,但返回HTCAPTION 也会在将鼠标悬停在该控件上时将我的自定义光标重置为 Windows 默认光标。有什么方法可以使用HTCAPTION 并仍然显示我的自定义光标?

注意:我知道如何在不使用HTCAPTION 的情况下实现控制移动并以这种方式解决光标问题

【问题讨论】:

    标签: delphi winapi cursor delphi-xe4


    【解决方案1】:

    使用WM_SETCURSOR 消息处理程序:

    procedure TCustomVCLControl.WMSetCursor(var Message: TWMSetCursor);
    begin
      SetCursor(Screen.Cursors[cr..]);
      Message.Result := 1;
    end;
    

    【讨论】:

    • if Message.HitTest <> HTCAPTION then SetCursor(...); 会不会更好?
    • @TLama - 我从这个问题中了解到,命中测试始终是 HTCAPTION。如果不是,当然。
    • @TLama 命中测试始终为HTCAPTION,因此无需额外测试,否则您是正确的。
    • @Dalija,即使您只是悬停在控件上,例如?如果是这样,那我根本不理解那个参数。
    • @TLama - 点击测试与点击无关,它仅通过位置识别。结果会影响点击将导致的结果。可能名字有点不对。。
    猜你喜欢
    • 2011-05-28
    • 2014-12-07
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多