前言:
EDF(EventsDistributionFrame)是本人在Access学习中开发的一个功能强大的程序,能够使许多不同类型的Access事件编程简化,为更好地介绍这个程序的使用方法,我将陆续介绍多个EDF的应用范例,及其代码的详细讲解。以便使用者更快地掌握其功能。 注:最新发布的EDF V1.2版本中已经包含了这个示例程序的最新版本,并且使用了1.2的新特性,不必再占用控件的Tags属性,改为使用EDF V1.2新增的自定义属性功能。 程序介绍: 本程序为EDF功能演示程序之一。本程序使用了EDF 1.11,实现了以下功能: 1、窗体上任何控件均能随意拖动。与多数拖动程序不同的是,开始拖动时,本程序将保持鼠标与控件的相对位置不变,而不是绑定到窗体左上角。当然前提是这个控件本身要支持鼠标事件。'定义EDF环境变量
Public edfCtls As New Collection
Public edfPorts As New Collection
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