请问关于按钮的问题

淡蓝色2 2003-06-04 07:39:52
有些程序的按钮的效果是这样的:当鼠标不在其上时跟label的效果是一样的,当鼠标移到其上时就凸起,当鼠标按下去时就凹陷下去。
比如工具栏上的按钮等等。

在.net里这种按钮的实现很容易,谁知道在VB如何实现这种效果的按钮?
...全文
17 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
boywang 2003-06-05
  • 打赏
  • 举报
回复
Private Declare Function SetCapture Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim MouseOver As Boolean

'判断当前鼠标位置是否在me上
MouseOver = (0 <= X) And (X <= Me.Width) And (0 <= Y) And (Y <= Me.ScaleHeight)
If MouseOver Then
' MouseOver Event
' 假如鼠标在me上, 则利用SetCapture将每一个鼠标事件都传递给me
' 并在StatusBar1.Panels(1)上显示帮助信息
StatusBar1.Panels(1).Text = "This is me"
SetCapture Me.hWnd
Else
' MouseLeave Event
' 假如鼠标不在me上, 则利用SetCapture释放鼠标捕捉
' 并清除在StatusBar1.Panels(1)上的帮助信息
StatusBar1.Panels(1).Text = ""
ReleaseCapture
End If
End Sub
myhot-河马吃草 2003-06-05
  • 打赏
  • 举报
回复
用API来探测是不是鼠标是离开按钮,,

rappercn 2003-06-05
  • 打赏
  • 举报
回复
Mousemove事件连续发生时,VB对该事件的捕捉不是很准,用控件吧。
liunini 2003-06-05
  • 打赏
  • 举报
回复
使用浮动按钮!
网上有别人已经做好的.ocx。可以下来直接用!
淡蓝色2 2003-06-05
  • 打赏
  • 举报
回复
楼上兄弟:
首先感谢您的代码

不过此程序有个小Bug:
把按钮放在窗口边缘,然后把鼠标快速从按钮上移出窗口,按钮的三维状态没有消失。也就是说,Mouseout事件不精确。
wingchi 2003-06-05
  • 打赏
  • 举报
回复
gruhancoolbutton控件

没有写错吧?
rainstormmaster 2003-06-04
  • 打赏
  • 举报
回复
VB实现按钮浮动效果

微软的Visual Basic确实是个好东东,编写应用程序快捷高效。但是入门容易,想玩转它可不简单。我个人学VB就深有体会:一个人在VB的殿堂里摸索是何等的辛苦啊!有时为了一个特技、一句代码甚至一个变量要反复调试运行几十遍,也未必能通过,真恨不得一枪崩了VB。所以,我连这一点点小技巧都不敢独品,拿出来与大家共享,也算抛砖引玉,引出更多、更精彩的奇思妙文,以“飨”读者。
关于浮动按钮的实现思路不少,多是采取多图片重叠显示来实现。这种方法代码量多,实现起来较繁琐。因为,一个按钮还好,如果有十个按钮呢?一个按钮三个图片,十个就要三十个图片,可不是闹着玩的。
我的思路是:
舍弃CommandButton控件,每个按钮用4条Line控件和一个Label控件替代。4条Line围住Label的边缘,调入窗体时,置显示属性为False,并将左、上直线的颜色设为白色,右、下直线的颜色设为黑色。当鼠标移到Label上时,4条Line的显示属性置True;当鼠标离开按钮时,将4条Line的显示属性设置为False。这样在视觉上就完全得到立体浮动的效果。另外,VB的Line控件还支持直线倾斜,以此类推,完全可以做出更加美观的倾斜按钮。篇幅所限,下面仅给出一个按钮实现浮动效果的源代码。
Option Explicit
Private Sub Form_Load()
'初始Form与Label
Form1.Caption = “浮动按钮"
Form1.KeyPreview = False
label1.Caption = “确定"
'初始4条Line的显示属性为False
Line1.Visible = False
Line2.Visible = False
Line3.Visible = False
Line4.Visible = False
'初始4条Line的颜色
Line1.BorderColor = &HE0E0E0
Line2.BorderColor = &HE0E0E0
Line3.BorderColor = &H808080
Line4.BorderColor = &H808080
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'鼠标指针在窗体上(不在按钮上)时,置4条Line的显示属性为False
Line1.Visible = False
Line2.Visible = False
Line3.Visible = False
Line4.Visible = False
End Sub
Private Sub label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'鼠标指针在按钮上时,置4条Line的显示属性为True
Line1.Visible = True
Line2.Visible = True
Line3.Visible = True
Line4.Visible = True
End Sub



victorycyz 2003-06-04
  • 打赏
  • 举报
回复
你可以用picture等控件,通过改变它的appearence、borderstyle、backcolor等属性来达到。
nofound007 2003-06-04
  • 打赏
  • 举报
回复
使用其它控件就行了

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧