如何得到任何控件的MouseEnter和MouseLeave消息?
要最方便简捷通用性强的方法!谢谢,请指教

解决方案 »

  1.   

    前提条件,从TControl继承的可视控件!充分利用消息机制!TNewXXX =class(TXXX)
    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 TNewXXX.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
    end;procedure TNewXXX.CMMouseLeave(var Message: TMessage);
    begin
      inherited;
      if Assigned(FOnMouseLeave) then
        FOnMouseLeave(Self);
    end;procedure TNewXXX.CMMouseEnter(var Message: TMessage);
    begin
      inherited;
      if Assigned(FOnMouseEnter) then
        FOnMouseEnter(Self);
    end;
      

  2.   

    就是要你自己做个CODE相同的控件。 只是你可以加上ENTER、LEAVE两个消息,如?!所说的一样
      

  3.   


    procedure TForm1.MouseWnd(var Message: TMessage);
    begin
      Case Message.Msg of
        wm_mouseMove :
        begin
          image1.Picture.LoadFromFile('C:\Program Files\Common Files\Borland Shared\Images\Backgrnd\calendar.bmp');
          Image1.Refresh;
        end;
        Cm_mouseleave:
          image1.Picture.LoadFromFile('C:\Program Files\Common Files\Borland Shared\Images\Backgrnd\greenbar.bmp');
      end;
        Image1.dispatch(Message);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Image1.WindowProc := MouseWnd;
    end;