求助啊。。。一小段有关位运算的代码不知道其功能
If Data.GetFormat(vbCFFiles) Then
Effect = vbDropEffectCopy And Effect '这里为什么要加上and effect?有什么作用?
Exit Sub
End If
Effect = vbdropeffnone
End Sub
还有,学到现在还是弄不明白如何进行位运算,比如在这里Effect = vbDropEffectCopy And Effect具体起到的判断作用是什么也不明白,求高人指点~
[解决办法]
------------------------------------------------------
当源部件决定放操作能发生,且源部件被放到目标部件时,此事件发生。
注意 仅当 OLEDropMode 被设置为 1 (Manual) 时,此事件才发生。
语法
Private Sub object_OLEDragDrop(data As DataObject, effect As Long, button As Integer, shift As Integer, x As Single, y As Single)
OLEDragDrop 事件语法包含下面部分:
部分 描述
Object 对象表达式,其值是“应用于”列表中的一个对象。
Data DataObject 对象,包含源提供的格式,另外也可能包含这些格式的数据。若 DataObject 不包含数据,则当控件调用 GetData 方法时提供数据。SetData 和 Clear 方法不能用在这里。
Effect 源对象设置的长整型数,用来识别执行的动作,这样当部件被移动后允许源采取适当的动作(例如,如果源被从一个部件移到另一个部件,则执行删除数据操作)。可能的取值列于“设置值”中。
Button 整数,当按下鼠标键时,与鼠标状态相对应。左键为位 0,右键为位 1,中键为位 2。这些位相应的值分别为 1,2 和 4,它代表了鼠标键的状态。可设置三个位中的部分、全部或根本不设置,相应地表明部分、全部按键被按下或没有按键按下。
Shift 整数,当按下 SHIFT、ctrl 和 ALT 键时,与这些键状态相对应。 shift 键为位 0,ctrl 键为位 1,alt 键为位 2。这些位相应的值分别为 1,2 和 4,shift 参数代表了这些键的状态。可设置三个位中的部分、全部或根本不设置,相应地表明部分、全部按键被按下或没有按键按下。例如,同时按下 ctrl 和 ALT 键,shift 值为 6。
x,y 确定鼠标指针当前位置的数值。x 和 y 值由对象的 ScaleHeight、ScaleWidth、ScaleLeft 和 ScaleTop 属性设置的坐标系统的格式来表示。
VbDropEffectScroll -2147483648一个掩码,指出放下目标窗口已经滚动或应该滚动。
设置值
effect 设置如下:
常数 值 描述
VbDropEffectNone 0 放目标不接受数据。
VbDropEffectCopy 1 放结果保存于从源到目标的数据拷贝中。初始数据没有被拖放操作改变。
VbDropEffectMove 2 放结果保存于要从拖放源移到放源的数据中。移动后,拖放源要删除数据。
说明
源 ActiveX 部件应总是屏蔽 effect 参数值,以确保同将来实现的 ActiveX 部件兼容。目前,仅使用了 effect 参数 32 位中的 3 位,然而将来的 Visual Basic 版本就可能用到其它位。所以考虑到将来的问题, 拖源和放目标在进行任何比较之前应屏蔽这些值。
例如,源部件不能把 effect 同 vbDropEffectCopy 相比,如:
If Effect = vbDropEffectCopy...
而是应该屏蔽该值或被搜寻的值,如:
If Effect And vbDropEffectCopy = vbDropEffectCopy...
-或-
If (Effect And vbDropEffectCopy)...
这样,允许在 Visual Basic 新版本中定义新的放效果,并与现存的代码保持向后兼容性。
大部分部件支持人工 OLE 拖放事件,也有一些支持自动化 OLE 拖放事件。
----------------------
为了确保源 ActiveX 部件实 ActiveX 部件兼容,对effect进行位运算
如果源ActiveX不屏蔽Effect,则Effcet默认为1,屏蔽Effect,则Effect默认为0
那么一下代码很好理解了
If data.GetFormat(vbCFFiles) Then ’如是文件则显示可放下图标effect = vbDropEffectCopy And effect '如果Effect不被屏蔽则结果为1,相当于Effect=vbDropEffectCopy,如果Effct被屏蔽,则结果为0,相当于Effect=vbDropEffectNoneElse ’否则显示不可放下图标effect = vbDropEffectNone 'vbDropEffectNone为0End If