轻松利用鼠标拖动控件标签,就可以改变控件值的函数-羽扇子君
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> 源码示例


轻松利用鼠标拖动控件标签,就可以改变控件值的函数

发表时间:2010/9/13 评论(4) 浏览(8226)  评论 | 加入收藏 | 复制
   
摘 要:像PhotoShop那样,拖放标签,即可改值。
正 文:

用鼠标在控件的标签上左右拖动,就可以改变控件的值,听着就很爽吧.

'首先,写一个标准模块,内容如下:

'声明 API引用
Public Declare Function SetCursor Lib "user32" (ByVal hCursor As Long) As Long    '获得"←→"形光标
Public Declare Function LoadCursorByNum Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long  '获得"←→"形光标

'函数定义

Public Sub SetControlValue(Button As Integer, X As Single, Optional MinLocked As Long = 0, Optional MaxLocked As Long = 2147483647, Optional LockedShift As Boolean = False, Optional Command As Control = Null)
'作用:控件的值随着鼠标按下左键后左右移动,而在MinLocked~MaxLocked之间改变大小.
'参数:  1.表示按下的键,
'       2.表示鼠标在控件上的X坐标值
'       3.表示,控件可接受的最小值,默认为0.界时,鼠标继续左移,控件值不变
'       4.表示,控件可接受的最大值,默认为2147483647(Long型最大值).界时,鼠标继续右移,控件值不变
'       5.表示控件的Locked属性为True时,是否改变控件的值;为False时不改变.为True 时,改变控件的值.
'       6.表示控件的值改变后,与其有关的命令按钮的Enabled属性是否变为True,如果参数不为空,则参数按钮的Enabled属性将改为 True
On Error Resume Next
Dim ctlCurrentControl As Control, CurrControlName As String
Static PrevControlName As String, theX As Single, IsButtonDown As Boolean
    Set ctlCurrentControl = Screen.ActiveControl
    CurrControlName = ctlCurrentControl.Name
    '确定控件
    If CurrControlName <> PrevControlName Then
        PrevControlName = CurrControlName
        Exit Sub
    End If
    '确定位置及鼠标:必须按左键;必须在标签上按
    If Button = acLeftButton And X < 0 Then IsButtonDown = True
    If Button = 0 And X > 0 Then IsButtonDown = False
    If Button = 0 Then IsButtonDown = False
    '赋值
    If IsButtonDown And IIf(LockedShift = False And ctlCurrentControl.Locked = True, False, True) Then
        SetCursor LoadCursorByNum(0, 32644)
        If X - theX > 10 Then
            If ctlCurrentControl = MaxLocked Then Exit Sub  'MaxLocked
            ctlCurrentControl = ctlCurrentControl + 1
        End If
        If X - theX < -10 Then
            If ctlCurrentControl = MinLocked Then Exit Sub  'MinLocked
            ctlCurrentControl = ctlCurrentControl - 1
        End If
        If Not Command Is Nothing And Command.Enabled = False Then Command.Enabled = True
    Else
        SetCursor 1     '恢复正常形状
    End If
    theX = X
    '鼠标在标签上移动时,显示为"←→"形状
    If X < 0 And IIf(LockedShift = False And ctlCurrentControl.Locked = True, False, True) Then
        SetCursor LoadCursorByNum(0, 32644)
    Else
        SetCursor 1
    End If
    Set ctlCurrentControl = Nothing
End Sub

接下来,在要用鼠标操作的控件的"鼠标移动"事件属性中,,选择[事件过程],在过程代码中,加入下面代码:

    SetControlValue Button, X

好了,减轻劳动量,轻松工作,源于需要.源于智慧.

(本人通过看到PhotoShop软件的这个特点,写出来的.)

 

最新修改:

1.加入红尘如烟的建议;

2.加入最小值、最大值的数值界定;

3.修正鼠标拖放控件时,其值还会变的Bug,使其只能在标签上有效。

 

 

 


Access软件网交流QQ群(群号:198465573)
 
 相关文章
仿标签控件  【纵云梯  2012/5/9】
服装吊牌打印工具,合格证,条码打印工具,条形码打印工具,用ACCE...  【bjllk  2012/6/20】
access小技巧-将一个未关联的标签,关联一个控件  【宏鹏  2012/7/21】
选项卡标签更改图片  【叶海峰  2012/8/7】
批量打印工作证示例,工作证报表打印,带照片的工作证标签打印,工作牌...  【听风  2012/11/30】
常见问答
技术分类
相关资源
文章搜索
关于作者

羽扇子君

文章分类

文章存档

友情链接