没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2007-09-24 09:33:14.000|阅读 921 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
网上的 IE 风格按纽控件不可谓少,然而天下的免费午餐总不会让你轻轻松松到吃下去,其中个味众人自知。其实,在 VB6.0中,IE 风格按纽很容易制作,真正的核心代码只需调用两个 API 函数。
按常规,IE 风格按纽的制作原理是,放置四条边线在 Image 和 Label 控件四周,在 Image和 Label 控件的 MouseMove 事件中,改变左,上,右,下线的 Visible 和 BorderColor 属性,按纽呈现浮起效果,同时改变 Image 控件的 Picture 属性,调入盘旋(Hover)图片;在 Image 和 Label 的 MouseDown 事件中通过改变 Image 和 Label 控件的位置(右下移)按纽呈现按下效果;鼠标离开按纽,按纽恢复平坦(Flat)状态。
如果你正在这样做,将会发现一个致命的问题。那就是,MouseMove 事件只能检测到鼠标在 Image 和 Label 两个控件本身范围内的移动,你没有办法检测鼠标的离开。“计算机世界”曾经登载过一个解决的办法,利用 SetCapture 和 ReleaseCapture API 函数。经 SetCapture 设定的控件可以强制性地捕捉鼠标在整个屏幕上的移动。这样,不管鼠标是不是在控件界面范围内移动,控件都可以捕捉得到。经过实践发现这个解决方案仍然存在一个问题,那就是,SetCapture 所设定控件在 ReleaseCapture 前,自动提示(ToolTipText)功能被抑制。这意味着这样编制的按纽没有自动提示功能,对很多人来说,这难以忍受。
WIN32 API 函数集是个不折不扣的庞大宝藏,你总能从里面找到你需要的工具。GetCursorPos和 WindowFromPoint 两个函数可以完美地解决这个问题。GetCursorPos 可以返回鼠标指针相对整个屏幕的坐标,WindowFromPoint 则根据鼠标指针的坐标,返回指针所处的控件的句柄。在这里,还需要引入一个定时器 (Timer)控件。
整个编程原理是,在 UserControl_Show 事件中,先将定时器置为无效。在 Image 和 Label的 MouseMove 事件中,执行使按纽浮起的代码,然后将定时器置为有效,这时定时器开始倒计时,在计时器的 Timer 事件中,用上述 API 函数检测鼠标指针是否已经离开了按纽,如果离开,则使按纽恢复平坦状态并立即使计时器无效,否则继续检测。我们看到,计时器的真正用途是用来触发事件,以检测鼠标的离开。将计时器置为无效是为了在不必要的时间,降低计时器对 CPU 的占用。
以下是函数和所需数据类型声明。
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Declare Function GetCursorPos Lib "user32" _
(lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32" _
(ByVal xPoint As Long, ByVal yPoint As Long) As Long
在 VB6.0中新建一个 ActiveX Control 项目。添加 LineLeft,LineTop,LineRight, LineBottom 四条边线,一个 Image 控件 Image1,一个 Label 标签控件 Label1,一个定时器控件 Timer1。关于用 VB 创建 ActiveX 控件的步骤这里不作描述(可以参考本文所附完整源代码)。与按纽制作有关的主要代码如下:
Private Sub UserControl_Show()
Timer1.Interval = 1 1/1000
秒
Timer1.Enabled=False
关闭定时器
将
UserControl
的提示信息引入
Image1,Label1
控件,
If UserControl.Ambient.UserMode = True Then
在
RunTime
Image1.ToolTipText = UserControl.Extender.ToolTipText
Label1.ToolTipText = UserControl.Extender.ToolTipText
End If
......此处添加其它代码
End Sub
Private Sub Image1_MouseMove
(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
....... 此处添加使按纽呈现浮起效果的代码
Timer1.Enabled = True 打开定时器
End Sub
Private Sub Timer1_Timer() 定时器触发
Dim MousePosition As POINTAPI
Dim ReturnValue As Long
Dim HwndHoverWindow As Long
ReturnValue = GetCursorPos(MousePosition)
返回鼠标指针坐标
返回指针所指位置的控件句柄
HwndHoverWindow = WindowFromPoint
(MousePosition.X, MousePosition.Y)
If HwndHoverWindow < > UserControl.hWnd Then
如果鼠标离开了按纽区域
...... 此处添加使按纽恢复平坦状态的代码
Timer1.Enabled = False 将定时器关闭,
以释放资源
End If
End Sub
Private Sub Image1_MouseDown
(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If Button = 1 Then
....... 此处添加使按纽呈现按下状态的代码
End If
End Sub
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:百川之家接DevExpress原厂商通知,将于近日上调旗下产品授权价格,现在下单客户可享受优惠报价!
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号