截获鼠标进入和离开image控件事件!
//--------------------------------------
请高手能指定指定,谢谢!

解决方案 »

  1.   

    该控件不是有onmousemove和onmouseup事件么?直接用该事件不就成了?
      

  2.   

    由于TImage组件没有句柄,所以直接操作可能很困难,不过你可以放一个TPanel,然后在Panel里放Image,再通过判断鼠标是否进入Panel就可以了!
      

  3.   

    我就是用的juliens(星星球愛思纯^_^)的这种方法
      

  4.   

    //方案1 利用TLabel透明覆盖在TImage上,实现起来比较简单
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Label1.Caption := '';
      Label1.Transparent := True;
      Label1.AutoSize := False;
      Label1.Parent := Image1.Parent;
      Label1.BoundsRect := Image1.BoundsRect;
      Label1.BringToFront;
    end;procedure TForm1.Label1MouseEnter(Sender: TObject);
    begin
      //TODO
    end;procedure TForm1.Label1MouseLeave(Sender: TObject);
    begin
      //TODO
    end;//方案2 利用TTimer检测鼠标移开
    procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      Timer1.Interval := 200;
      Timer1.Enabled := True; //开始检测
    end;function ControlFromPoint(mParent: TWinControl; mPoint: TPoint): TControl;
    var
      I: Integer;
    begin
      Result := nil;
      if not Assigned(mParent) then Exit;
      for I := 0 to mParent.ControlCount - 1 do begin
        if not mParent.Controls[I].Visible then Continue;
        if PtInRect(mParent.Controls[I].BoundsRect, mPoint) then begin
          if mParent.Controls[I] is TWinControl then
            Result := ControlFromPoint(TWinControl(mParent.Controls[I]),
              Point(mPoint.X - mParent.Controls[I].Left,
                mPoint.Y - mParent.Controls[I].Top));
          if not Assigned(Result) then Result := mParent.Controls[I];
        end;
      end;
    end; { ControlFromPoint }procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if ControlFromPoint(Image1.Parent, Mouse.CursorPos) <> Image1 then
      begin
        //TODO
        Timer1.Enabled := False;
      end;
    end;
      

  5.   

    unit MyImage;interface
     uses buttons,Windows, Messages, Classes, Controls, Forms, Graphics, StdCtrls,
      ExtCtrls, CommCtrl,dialogs;
    type TMyImage=class(TImage)
      private
        procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
        procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
      public
      end;
    procedure Register;
    implementationprocedure  TMyImage.CMMouseEnter(var Message: TMessage);
    begin
      showmessage('enter');
    end;
    procedure  TMyImage.CMMouseLeave(var Message: TMessage);
    begin
      showmessage('leave');
    end;
    procedure Register;
    begin
      RegisterComponents('standard', [TMyImage]);
    end;
    end.
      

  6.   

    简单方法:
    进入Image时用onMouseMove事件,离开Image时用Image周围组件的onMouseMove事件.
      

  7.   

    Delphi中有两个Delphi自定义的消息是鼠标进入和离开控件的,但是我忘了消息名了,不好意思,等着帮你查查。
    不行就自己挂主消息循环,拦WM_MOUSEMOVE消息吧,当鼠标的Point在Image控件的范围内时就触发你的代码,也不难写地
      

  8.   

    要是不想自定义控件 用伴水的方法 如果你着个东东常用 用 jinjazz的方法合适
      

  9.   

    //以下为一个带OnMouseEnter和OnMouseLeave事件的TImage控件,将它安装到Delphi即可使用unit UntMyImage;interfaceuses
      SysUtils, Classes, Controls, ExtCtrls, Messages;type
      TMyIimage = class(TImage)
      private
        FOnMouseLeave: TNotifyEvent;
        FOnMouseEnter: TNotifyEvent;
      protected
        procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
        procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
      published
        property OnMouseEnter:TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
        property OnMouseLeave:TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Samples', [TMyIimage]);
    end;{ TMyIimage }procedure TMyIimage.CMMouseEnter(var Message: TMessage);
    begin
      inherited;
      if Assigned(FOnMouseEnter) then
        FOnMouseEnter(self);
    end;procedure TMyIimage.CMMouseLeave(var Message: TMessage);
    begin
      inherited;
      if Assigned(FOnMouseLeave) then
        FOnMouseLeave(self);
    end;end.