设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 31834|回复: 193
打印 上一主题 下一主题

[模块/函数] 【原创 / 源码】EDF应用实例讲解——窗体控件随便拖

[复制链接]
跳转到指定楼层
1#
发表于 2005-9-18 03:26:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前言:

  EDF(EventsDistributionFrame)是本人在Access学习中开发的一个功能强大的程序,能够使许多不同类型的Access事件编程简化,为更好地介绍这个程序的使用方法,我将陆续介绍多个EDF的应用范例,及其代码的详细讲解。以便使用者更快地掌握其功能。

注:最新发布的EDF V1.2版本中已经包含了这个示例程序的最新版本,并且使用了1.2的新特性,不必再占用控件的Tags属性,改为使用EDF V1.2新增的自定义属性功能。

程序介绍:

本程序为EDF功能演示程序之一。本程序使用了EDF 1.11,实现了以下功能:

1、窗体上任何控件均能随意拖动。与多数拖动程序不同的是,开始拖动时,本程序将保持鼠标与控件的相对位置不变,而不是绑定到窗体左上角。当然前提是这个控件本身要支持鼠标事件。
2、选择控件后使用ALT加方向键,可以进行1缇为单位的位置微调。当前前提是这个控件本身要支持键盘事件。
3、可拖动的控件包括所有Access标准控件,包括窗体上已有的,和你自己加上去的控件。(你可以自己添加几个标准控件试试)
4、程序中使用了防错以避免超出窗体范围。

以上全部功能,使用EDF后,在不到30行代码内完成。

实现代码:

'定义EDF环境变量
Public edfCtls As New Collection
Public edfPorts As New Collection

Public Sub Form_Load()
    '截获窗体所有控件的事件
    edfInitEvents edfCtls, edfPorts, Me, 0
    '设定事件处理程序为DragDrop
    edfInitPorts edfPorts, AddressOf DragDrop, 0
End Sub

Public Sub DragDrop(ByRef acCtl As Control, ByRef strEvent As String, ByRef Params As Collection, ByRef reserved As Long)
    Dim Tags() As String
    '开始拖动,在标记中保存鼠标相对位置
    If strEvent = "MouseDown" Then
        acCtl.Tag = Params("X") & "," & Params("Y")
        Exit Sub
    End If
    '结束拖动,清除标记
    If strEvent = "MouseUp" Then acCtl.Tag = ""
   
'防止越界
On Error GoTo Exit_Sub
    '键盘移动
    If strEvent = "KeyDown" Then
        Select Case Params("KeyCode").Value
        Case 37: '左方向键
            acCtl.Left = acCtl.Left - 1
        Case 38: '上方向键
            acCtl.Top = acCtl.Top - 1
        Case 39: '右方向键
            acCtl.Left = acCtl.Left + 1
        Case 40: '下方向键
            acCtl.Top = acCtl.Top + 1
        End Select
    End If
    '鼠标拖动
    If strEvent = "MouseMove" And acCtl.Tag <> "" Then
        Tags = Split(acCtl.Tag, ",")
        acCtl.Left = acCtl.Left + Params("X") - CLng(Tags(0))
        acCtl.Top = acCtl.Top + Params("Y") - CLng(Tags(1))
    End If
   
Exit_Sub:
End Sub







完整下载:(包含实现代码和EDF 1.11环境)

游客,如果您要查看本帖隐藏内容请回复



[此贴子已经被作者于2006-5-23 12:58:00编辑过]

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2005-9-18 11:12:00 | 只看该作者
dingyixia
3#
发表于 2005-9-18 16:10:00 | 只看该作者
哇......学习学习...
4#
发表于 2005-9-18 18:20:00 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
5#
发表于 2005-9-18 18:25:00 | 只看该作者
学习



6#
 楼主| 发表于 2005-9-18 21:54:00 | 只看该作者
以下是引用esmile在2005-9-18 10:20:00的发言:



紧跟党中央走.学习与领悟中……

如果不介意,提出一点设想:

设定的事件中,能否实现将拖放功能扩展到程序外?

也就是比如说:在拖动桌面上的JPG图片文件到ACCESS程序图像控件中,自动将该图片文件加到图像控件上,显示图像控件显示.

不知道能否做到?

这个属于OLE范畴吧,和事件没啥关系了。
7#
 楼主| 发表于 2005-9-19 06:23:00 | 只看该作者
最新发布的EDF V1.2版本中已经包含了这个示例程序,并且使用了1.2的新特性,不必再占用控件的Tags属性,改为使用EDF V1.2新增的自定义属性功能。
8#
发表于 2005-9-19 11:49:00 | 只看该作者
学习
9#
发表于 2005-9-19 17:34:00 | 只看该作者
看看
10#
发表于 2005-9-19 17:39:00 | 只看该作者
精品!酷!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-14 17:04 , Processed in 0.152061 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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