设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
楼主: tmtony
打印 上一主题 下一主题

[高1]使用ACCESS实现滑块slider控件的效果

[复制链接]

点击这里给我发消息

21#
 楼主| 发表于 2003-4-8 03:32:00 | 只看该作者
也许是我的疏忽,我不知道已有这个贴子,不过三四年前,我还刚开始用ACCESS :),还没上过论坛。 我记得进度条的程序在这里已有发过,但滑块效果我还没发现过。
我想以后如果出的题目已有现成的答案,请大家尽快发贴提示,以免重复劳动。
这次我想这样来处理,roadbeg一早让贤,而cg1这次是评委,不能参赛:),harsonliao的功能和trynew的功能不相上下,但在界面上略胜,所以我想一等奖为harsonliao,二等奖为trynew,三等奖为roadbeg. 不知意下如何。因为题目是我出错了,我想这次胜出者照加分,我的分数减100(我晚上偷偷再加回来)
22#
发表于 2003-4-8 03:58:00 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
23#
发表于 2003-4-8 04:34:00 | 只看该作者
虽然已颁奖,不过我完善了一下,支持鼠标点击。
tmtony应该给我一个“劳苦功高"奖:)




[此贴子已经被作者于2003-4-7 20:35:16编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
24#
发表于 2003-4-8 04:39:00 | 只看该作者
不知漂然看我的例子没有,我的例子本身就支持点击.
不过,看了下你的例子,给提个意见,你最好用主体的 mousemove 事件来做点击.
照你现有的方式做.....,也太累了,且难于再开发.
25#
发表于 2003-4-8 04:41:00 | 只看该作者
所以我说是“劳苦功高”奖:)
另外,Roadbeg你的例子:
1、有时候点击起来不灵哦,没反应。
2、位置明显不对应。
3、给用户的感觉就是粗制滥造

希望你不要气晕:)
[此贴子已经被作者于2003-4-7 20:45:08编辑过]

26#
发表于 2003-4-8 05:37:00 | 只看该作者
我支持飘然妹子,从市场、用户角度来说,Roadbeg的例子与飘然的例子是不可想提并论的,飘然的成本很低效果很好(站在haosonliao的巨人肩膀上),而Roadbeg的成本太高,效果较差。
27#
发表于 2003-4-8 05:38:00 | 只看该作者
以下是引用飘然在2003-4-7 20:40:34的发言:
所以我说是“劳苦功高”奖:)
另外,Roadbeg你的例子:
1、有时候点击起来不灵哦,没反应。
2、位置明显不对应。
3、给用户的感觉就是粗制滥造

希望你不要气晕:)
[此贴子已经被作者于2003-4-7 20:45:08编辑过]

1.点起来没反应是因为我作了点击位置判断,不在进度条范围内的点击不处理.
2.可能是我眼睛有问题,因为我没发现与 windows 的标准控件相比在点击处理上有什么不
同.
3.这句很正确,因为我一向不做界面,本就是粗制滥造!
28#
发表于 2003-4-8 16:27:00 | 只看该作者
完了!晚了!!!!我刚刚做好!你们早完事了!郁闷!!~!`
我不献丑了!闪!
29#
发表于 2003-4-8 16:58:00 | 只看该作者
不晚不晚,冠军已产生,你就来个挑战赛嘛。
大家给点掌声,有请吴大高手出场!
30#
发表于 2003-4-8 19:47:00 | 只看该作者
以下是引用竹笛在2003-4-7 21:37:15的发言:
我支持飘然妹子,从市场、用户角度来说,Roadbeg的例子与飘然的例子是不可想提并论的,飘然的成本很低效果很好(站在haosonliao的巨人肩膀上),而Roadbeg的成本太高,效果较差。


成本太高可能是说我的源程明显比别人的长.大家看一下我的源码:
我的代码确是较长,且定义了许多变量(常量也是预备将来转换到变量的.),并且有些变量还没用到.不错,如果只是要实现示例子中所示的功能,根本用不了这许多代码,但一开始我就不是只为实现这点简单功能而设计的.而是考虑到如何让它方便的转换到类,如何更像一个真正的 slider 控件.
如何能方便的定义刻度数量,最小刻度值,最大刻度值,最小移动,最大移动距离,
如何能方便的限定 slider 的大小....

当然,我这个例子主要是模仿 slider 的刻度尺功能,而其它的例子都是模仿的滑块功能,所以我的例子只能是跳跃移动(因为标准控件实现刻度尺功能的时候就是跳跃移动的),而其它例子都是平滑移动的.

Option Compare Database
Option Explicit

'本例主要模仿了 标准 slider 控件的 刻度尺功能.

'定义初始常量,这些常量为设计模式中的左边距(或其它数值) 乘以 567
Private Const pcnt_lngArrowStart As Long = 477                      '箭头起始位置的 left 属性值
Private Const pcnt_lngMinScale As Long = 8                          '最小刻度标记
Private Const pcnt_lngMaxScale As Long = 16                         '最大刻度标记
Private Const pcnt_lngScaleSpace As Long = 567                      '两个刻度之间的距离.

Private Const pcnt_lngSliderTop As Long = 2041                      'slider 的 top
Private Const pcnt_lngSliderHeight As Long = 624                    'slider 的 height
Private Const pcnt_lngSliderLeft As Long = 340                      'slider 的 left
Private Const pcnt_lngSliderWidth As Long = 4990                    'slider 的 width

Private Const pcnt_lngArrowLeft As Long = 477                       '滑块图的 left(即, slider 开始处的 left)
Private Const pcnt_lngBackLineLeft As Long = 576                    '滑块背景线的 left(即, slider 开始处的 left
Private Const pcnt_lngBackLineWidth As Long = 4536                  'width

Private p_lngLongMove As Long                                       '最小单次移动距离
Private p_lngShortMove As Long                                      '最大单次移动距离
Private p_lngSliderValue As Long                                    'slider 的当前值
Private p_lngSpaceScale As Long                                     '最大移动距离与最小移动距离的比例
'

Private Sub Form_Load()
   
    p_lngSpaceScale = 4                                             '最大距离与最小距离之间的比例.
    p_lngShortMove = pcnt_lngScaleSpace                             '初始设置最小距离为两个刻度之单的距离
    p_lngLongMove = p_lngShortMove * p_lngSpaceScale                '初始设置最大距离为最小距离的 4 倍.
    p_lngSliderValue = pcnt_lngMinScale                             '设置 slider 的当前值为最小刻度值
        
End Sub

'箭头的 mousemove 事件.
'在此事件中实现箭头的短距离移动,即一次移动一个刻度.

Private Sub imgArrow_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button And acLeftButton > 0 Then                                 '检测左键是否被按下
        If X > pcnt_lngScaleSpace / 2 Then                              '如果正在向正方向移动,且因为是跳跃移动,所以必须判断 mousemove 的距离是否已超过 1/2 间距,超过才进行移动,反之则不移动.
            If imgArrow.Left + p_lngShortMove <= pcnt_lngArrowLeft + pcnt_lngBackLineWidth Then                               '判断移动后是否会超出范围
                imgArrow.Left = imgArrow.Left + p_lngShortMove
                p_lngSliderValue = p_lngSliderValue + 1
            End If
        ElseIf X < pcnt_lngScaleSpace / 2 * -1 Then                     '如果正在向负方向移动
            If imgArrow.Left - p_lngShortMove >= pcnt_lngArrowLeft Then                               '判断移动后是否会超出范围
                imgArrow.Left = imgArrow.Left - p_lngShortMove         '进行单次短移动.
                p_lngSliderValue = p_lngSliderValue - 1
            End If
        End If
        Call ResetFontSize
    End If
End Sub


'主体的单击事件.
'在此事件中实现刻度的长距
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-3 05:05 , Processed in 0.169647 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表