网上有这种控件啊!何必要自己做呢?去下一个来用不就得了?你找不到的话留下Email,我发一个给你
================================================================
[* 我是僵尸我怕谁 *]

解决方案 »

  1.   

    是啊
    有现成的最好
    但如果自己想做或想知道其实现的一种方法的话
    SetCapture
    ReleaseCapture
    在按钮的MouseMove事件第一次发生的时候SetCapture
    在MouseMove的时候对鼠标的坐标进行判断
    若坐标的值超出按钮的范围,则ReleaseCapture
    大概就是这样的吧
      

  2.   

    下载一个即可,我的主页上有(http://junwhj.myrice.com),一个简单的例子:Option ExplicitPrivate Declare Function DrawEdge Lib "user32" (ByVal hdc As Long, qrc As RECT, ByVal edge As Long, ByVal grfFlags As Long) As Long
    Private Declare Function GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
    Private Declare Function SetCapture Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare Function ReleaseCapture Lib "user32" () As LongPrivate Const BF_TOP = &H2
    Private Const BF_LEFT = &H1
    Private Const BF_RIGHT = &H4
    Private Const BF_BOTTOM = &H8
    Private Const BF_RECT = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM)Private Const BDR_RAISEDINNER = &H4
    Private Const BDR_SUNKENOUTER = &H2Private Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End TypePrivate rc As RECTPrivate Sub Form_Load()
        Picture1.AutoRedraw = True
    End SubPrivate Sub Picture1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
        GetClientRect Picture1.hWnd, rc
        If x > 0 And x < Picture1.ScaleWidth And y > 0 And y < Picture1.ScaleHeight Then
            DrawEdge Picture1.hdc, rc, BDR_RAISEDINNER, BF_RECT
            Picture1.Refresh
            SetCapture Picture1.hWnd
        Else
            Picture1.Cls
            ReleaseCapture
        End If
    End SubPrivate Sub Picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
        DrawEdge Picture1.hdc, rc, BDR_SUNKENOUTER, BF_RECT
        Picture1.Refresh
    End SubPrivate Sub Picture1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
        DrawEdge Picture1.hdc, rc, BDR_RAISEDINNER, BF_RECT
        Picture1.Refresh
    End Sub
      

  3.   

    对到网上去下一个吧 很方便的
    自己做太累了 如过你非要自己做的话给我留言
    我给你代码
    我提供你一个网站非常好你可以去看看 有你要的东东
    www.applevb.com
    多给点分呀 我要升级了
      

  4.   

    呵呵,要自己实现也不难
    用picture控件,准备3张图片鼠标没有移上去用图片1
    鼠标移上去用图片2
    鼠标点下去用图片3写点代码,做点效果就OK了
    很多看起来三维的效果,好多都是眼睛的错觉,只是平面图形巧妙处理一下而已
      

  5.   

    Dim sf, st, xf, xr
    Private Sub Form_Load()
     'image1.picture=loadpicture("路径")
     sf = Image1.Left
     st = Image1.Top
     xf = Image1.Left + Image1.Width
     xr = Image1.Top + Image1.Height
    End Sub
    Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
     Cls
    End Sub
    Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
      Line (sf - 1, st - 1)-(sf - 1, xr + 1), QBColor(15)
      Line (sf - 1, st - 1)-(xf + 1, st - 1), QBColor(15)
      Line (xf + 1, st - 1)-(xf + 1, xr + 1), QBColor(0)
      Line (sf - 1, xr + 1)-(xf + 1, xr + 1), QBColor(0)
    End Sub
    ' 这是简单的,你可以自己处理使图像不闪烁,(如用line 控件,或画直线起始与终点重合)
      

  6.   

    谢谢大家,如果谁有原码就发给我了~
    [email protected]
    我去试一下,行得话立即给分~~:)
      

  7.   

    我真的想告诉你一个好方法,我要100分:将 toolbar 的样式改成平面的即可,本人用的十分OK.何必要做那么多??象楼上的。
    By Morn
      

  8.   

    我有控件,要的话EMAIL给我:
     [email protected]