如何知道光标移出或移进控件(如:panel)?
用什么事件?

解决方案 »

  1.   

    API :SetCapture 和ReleaseCapture 
    用法去看MSDN包你满意!不满意去报警!
      

  2.   

    使用消息处理
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;//移进
        procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;//移出
      

  3.   

    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;
      

  4.   

    充分利用消息机制!方法一:继承并创建新类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;