case msg.Msg of CM_MOUSEENTER: begin showmessage('mouse enter'); setcapture(Self.Handle); application.ProcessMessages; end; end;
case msg.Msg of CM_MOUSELEAVE:if GetCapture = form1.Handle then begin showmessage('mouse leave'); ReleaseCapture; Application.ProcessMessages; end; end;
楼主的意思是鼠标进/出窗体上的控件时不想处理Form的CM_MOUSEENTER和 CM_MOUSELEAVE消息,naughtyboy(一切都是为了明天) 的代码中需要再判断一下:var MouseEntered: Boolean;procedure TForm1.MouseEnter(var Msg: TMessage); begin case msg.Msg of CM_MOUSEENTER: begin if not MouseEntered then begin showmessage('mouse enter'); MouseEntered := True; end; setcapture(Self.Handle); application.ProcessMessages; end; end; end;procedure TForm1.MouseLeave(var Msg: TMessage); var p: TPoint; r: TRect; begin case msg.Msg of CM_MOUSELEAVE:if GetCapture = form1.Handle then begin // 如果鼠标从控件移出到窗体就不处理 GetCursorPos(p); GetWindowRect(Handle, r); if not PtInRect(r, p) then begin showmessage('mouse leave'); MouseEntered := False; end; ReleaseCapture; Application.ProcessMessages; end; end; end;
procedure TForm1.MouseEnter(var Msg: TMessage);
begin
if Msg.LParam = 0 then begin
...
end;
end;
CM_MOUSEENTER:
begin
showmessage('mouse enter');
setcapture(Self.Handle);
application.ProcessMessages;
end;
end;
CM_MOUSELEAVE:if GetCapture = form1.Handle then
begin
showmessage('mouse leave');
ReleaseCapture;
Application.ProcessMessages;
end; end;
CM_MOUSELEAVE消息,naughtyboy(一切都是为了明天) 的代码中需要再判断一下:var MouseEntered: Boolean;procedure TForm1.MouseEnter(var Msg: TMessage);
begin
case msg.Msg of
CM_MOUSEENTER:
begin
if not MouseEntered then begin
showmessage('mouse enter');
MouseEntered := True;
end;
setcapture(Self.Handle);
application.ProcessMessages;
end;
end;
end;procedure TForm1.MouseLeave(var Msg: TMessage);
var
p: TPoint;
r: TRect;
begin
case msg.Msg of
CM_MOUSELEAVE:if GetCapture = form1.Handle then
begin
// 如果鼠标从控件移出到窗体就不处理
GetCursorPos(p);
GetWindowRect(Handle, r);
if not PtInRect(r, p) then begin
showmessage('mouse leave');
MouseEntered := False;
end;
ReleaseCapture;
Application.ProcessMessages;
end; end;
end;