2013-12-11 1 views
3

델파이 5에서는이 기능이 사용되었습니다. 나는 TCustomControl의 하위 구성 요소를 가지고 있고 나는 cmmouseleave 메시지 구현 : 이제 난 그냥 컨트롤 위에 마우스를 이동하고 경우에 메시지가 트리거Delphi XE2 TCustomControl에서 CMMouseLeave가 트리거되지 않았습니다.

procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; 

을하지만, 마우스 왼쪽 버튼을 유지하면서 나는 마우스를 이동하고있는 경우 아래로 누르면 같은 메시지가 표시되지 않습니다. AFAIK 나는 begindrag 메서드를 호출하지 않았으며 dragmode는 manual로 설정되었습니다. 무슨 일이 벌어 질 지에 대한 단서가 있습니까?

+3

왼쪽 버튼을 누르면 마우스가 캡처됩니다. 따라서 컨트롤이 마우스가 컨트롤 외부에 있더라도 마우스 이동 메시지 (WM_MOUSEMOVE)를받습니다. 단추를 놓을 때 마우스 놓기 메시지가 수신됩니다. 나는 이것이 D5의 경우가 아니라고 크게 의심한다. –

+0

감사합니다. mouseleave는 버튼을 놓을 때만 실행됩니다. 확실하지는 않지만 D5에서 작동한다고 생각했습니다. 이것을 대답으로 받아 들일 수 있습니까? – user1238784

+0

당신을 진심으로 환영합니다. 내가 대답을 답변으로 올렸다. –

답변

6

마우스는 왼쪽 버튼을 누르면 캡처됩니다. 따라서 컨트롤이 마우스가 컨트롤 외부에 있더라도 마우스 이동 메시지 (WM_MOUSEMOVE)를받습니다. 단추를 놓을 때 마우스 놓기 메시지가 수신됩니다. 이것은 D5에서도 마찬가지입니다.

WM_LBUTTONDOWN에 대한 응답으로 마우스를 캡처하지 않으려면 ControlStyle에서 csCaptureMouse을 제외 할 수 있습니다.