我用Picture 控件来做按钮,图片里有五个一样大小的图像,但颜色不一样.
窗体和控件的单位是 "像素"在MouseMove 事件里写了这样的代码Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
 If Button = 1 Then                       '是否是单击左键
    If X < 0 Or X > 30 Or Y < 0 Or Y > 30 Then               '是否移出按钮
        Picture1.PaintPicture Picture1.Picture, 0, 0, 30, 30, 0, 0, 30, 30, vbSrcCopy
    Else
        Picture1.PaintPicture Picture1.Picture, 0, 0, 30, 30, 120, 0, 30, 30, vbSrcCopy
    End If
 ElseIf X < 5 Or X > 25 Or Y < 5 Or Y > 25 Then
    Picture1.PaintPicture Picture1.Picture, 0, 0, 30, 30, 0, 0, 30, 30, vbSrcCopy
 Else
    Picture1.PaintPicture Picture1.Picture, 0, 0, 30, 30, 30, 0, 30, 30, vbSrcCopy
 End If
End Sub
在MouseDown 事件里写了这样的代码Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
 Picture1.PaintPicture Picture1.Picture, 0, 0, 30, 30, 120, 0, 30, 30, vbSrcCopy
End Sub    这些代码是用来当鼠标移到 Picture上时切割到另外一个图像,单击的时候又切割到别外一个图像
在按钮上移动只要慢一点效果就很好,但是遗憾的是当鼠标飞快的从按钮上移过或移走时图像就不能切回来了请问各位高手,我要如何才能达到完美的 MouseOut 事件啊

解决方案 »

  1.   

    MouseOut??没听过哦
    你在窗体的mousemove里改回不就行了?
      

  2.   

    当鼠标移出控件后就不会产生MouseMove事件:
    If X < 0 Or X > 30 Or Y < 0 Or Y > 30 Then               '是否移出按钮
            Picture1.PaintPicture Picture1.Picture, 0, 0, 30, 30, 0, 0, 30, 30, vbSrcCopy
    永远执行不了。
    而且if嵌套有错误
      

  3.   

    当窗体上的控件的窗体占得满满的和两个控件靠得很近时就触发不到 mousemove 事件了
      

  4.   

    上面那位高手说用 API 函数,那么用那个 API 函数呢?请说清楚啊 ,如果可以的话请给出代码啊
      

  5.   

    Picture1.PaintPicture Picture1.Picture, 0, 0, 30, 30, 0, 0, 30, 30, vbSrcCopy
    ??
    自己画自己?能执行你也看不到啊。
    API就是BITBLT,
      

  6.   

    使用RELEASECAPTURE这个PAI来获得鼠标的位置,并判断是否在控件范围内.这个很准确.
      

  7.   

    注意,捕获和判断鼠标的位置的代码可以放在一个TIMER控件内.
      

  8.   

    不晓得 你把你读的大图先切成所需要的小块存在一个数组里面
    然后 再用mouseMove mouseDown 会不会快一点
    忘记了vb里面有没有mouseOn没有的话可以考虑自己写一个
    用起来会很方便
      

  9.   

    这位高手 province_(雍昊) 应该没用看清我的题目
    我的单位是"像数"
      

  10.   

    这位高手 " WallesCai(最奢侈的事就是睡觉了,偶好想睡觉哦.女朋友可以不找,) " 你能不能做一个按钮出来给我看一看啊,我好菜啊,不太明白要怎样写也可发到
      

  11.   

    这位高手    "sunxutx(孤云挂月)" 说MouseOn 是什么来的,你可以讲得清楚一点吗,我真的
    好菜啊  如果可以的话你做一个出来给我看一看啊,要多加注释啊也可发到
      

  12.   

    http://www.somade.com/是个很专业的技术社区,去那里找找吧,或许有你要的答案~
      

  13.   


    '前两天刚刚研究过这个问题,在网上找到的Option Explicit
    Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function ReleaseCapture Lib "user32" () As LongPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        
        Dim MouseEnter As Boolean
        MouseEnter = (0 <= X) And (X <= Picture1.Width) And (0 <= Y) And (Y <= Picture1.Height)
        
        If MouseEnter Then
            '
            SetCapture Picture1.hwnd
            Text1.Text = "Mouse in picuture!"
        Else
            Text1.Text = "Mouse out!"
            ReleaseCapture
        End If
        
    End Sub
      

  14.   

    http://community.csdn.net//Expert/TopicView1.asp?id=4210204请求高手帮忙