Delphi XE2 CMMouseLeave未在TCustomControl上触发

use*_*784 3 delphi delphi-xe2

在Delphi 5中,这曾经起作用.我有一个来自TCustomControl的组件,我实现了cmmouseleave消息:

procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
Run Code Online (Sandbox Code Playgroud)

现在,如果我只是将鼠标移到控件上,则会触发消息,但如果我在按住鼠标左键的同时移动鼠标,则不会触发相同的消息.AFAIK我没有调用begindrag方法,并且dragmode设置为手动.什么可能发生的任何线索?

Ser*_*yuz 6

按左按钮时捕获鼠标.因此,WM_MOUSEMOVE即使鼠标在控件之外,控件也会接收鼠标移动消息().释放按钮时,它将收到鼠标离开消息.这也应该是D5的情况.

如果您不希望捕获鼠标以响应a csCaptureMouse,ControlStyle则可以排除WM_LBUTTONDOWN.