procedure TForm1.Panel1MouseMove(Sender: TObject; Shift:TShiftState; X, Y: Integer); var a:TRect; b:TPoint; begin a:=rect(0,0,panel1.Width+panel1.Left,panel1.Height+panel1.Top); b.X:=x; b.Y:=y; if PtInRect(a,b) then showmessage('光标移入'); end;
充分利用消息机制!方法一:继承并创建新类TNewPanel =class(TPanel) private FOnMouseLeave: TNotifyEvent; FOnMouseEnter: TNotifyEvent; procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; procedure CMMouseEnter(var Message: TMessage); message CM_MOUSENTER; public constructor Create(AOwner: TComponent);override; published property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; end;constructor TNewPanel.Create(AOwner: TComponent); begin inherited Create(AOwner); end;procedure TNewPanel.CMMouseLeave(var Message: TMessage); begin inherited; if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); end;procedure TNewPanel.CMMouseEnter(var Message: TMessage); begin inherited; if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); end;方法二: procedure MouseWnd(var Message: TMessage); begin Case Message.Msg of CM_MOUSENTER://移入时 CM_MOUSELEAVE://移出时 Panel.dispatch(Message); end;创建窗体时: Panel.WindowProc := MouseWnd;
用法去看MSDN包你满意!不满意去报警!
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;//移进
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;//移出
var
a:TRect;
b:TPoint;
begin
a:=rect(0,0,panel1.Width+panel1.Left,panel1.Height+panel1.Top);
b.X:=x;
b.Y:=y;
if PtInRect(a,b) then showmessage('光标移入');
end;
private
FOnMouseLeave: TNotifyEvent;
FOnMouseEnter: TNotifyEvent;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSENTER;
public
constructor Create(AOwner: TComponent);override;
published
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
end;constructor TNewPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;procedure TNewPanel.CMMouseLeave(var Message: TMessage);
begin
inherited;
if Assigned(FOnMouseLeave) then
FOnMouseLeave(Self);
end;procedure TNewPanel.CMMouseEnter(var Message: TMessage);
begin
inherited;
if Assigned(FOnMouseEnter) then
FOnMouseEnter(Self);
end;方法二:
procedure MouseWnd(var Message: TMessage);
begin
Case Message.Msg of
CM_MOUSENTER://移入时
CM_MOUSELEAVE://移出时
Panel.dispatch(Message);
end;创建窗体时:
Panel.WindowProc := MouseWnd;