image上没有hwnd怎么做鼠标移进移出事件判断,button是可以用API做。Image没句柄怎么做啊。来点提示大虾们。

解决方案 »

  1.   

    我使用的是2007它有个leave事件
      

  2.   

    此贴分多,献上代码{Timer的Interval值设置得小一点}procedure TForm1.Timer1Timer(Sender: TObject);
    var
      Pt: TPoint;
    begin
      GetCursorPos(Pt);
      Pt := ScreenToClient(Pt);
      if PtInRect(Image1.BoundsRect, Pt) then
        Caption := 'In' else Caption := 'Out';
    end;
      

  3.   

    {上面的代码再简化一点,就是下面这样了:}procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if PtInRect(Image1.BoundsRect, ScreenToClient(Mouse.CursorPos)) then
        Caption := 'In' else Caption := 'Out';
    end;
      

  4.   

    如果不想用Timer,就在Form的OnMouseMove和Image的OnMouseMove里写上面的代码。
      

  5.   

    从TImage继承下来,写个控件,处理CM_MOUSELEAVE消息。  TMyImage = class(TImage)
      private
        procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
      end;
    ...
    procedure TMyImage.CMMouseLeave(var Msg: TMessage);
    begin
      ShowMessage('Mouse leave!');
    end;
    //测试
    procedure TForm1.Button1Click(Sender: TObject);
    var
      img1: TMyImage;
    begin
      img1:= TMyImage.Create(Self);  img1.Parent:= Self;  img1.Width := 100;
      img1.Height:= 200;
      img1.Visible:= true;  img1.Canvas.Rectangle(img1.Canvas.ClipRect);
    end;