If Data.GetFormat(vbCFFiles) Then
Effect = vbDropEffectCopy And Effect '这里为什么要加上and effect?有什么作用?
Exit Sub
End If
Effect = vbdropeffnone
End Sub还有,学到现在还是弄不明白如何进行位运算,比如在这里Effect = vbDropEffectCopy And Effect具体起到的判断作用是什么也不明白,求高人指点~
Effect = vbDropEffectCopy And Effect '这里为什么要加上and effect?有什么作用?
Exit Sub
End If
Effect = vbdropeffnone
End Sub还有,学到现在还是弄不明白如何进行位运算,比如在这里Effect = vbDropEffectCopy And Effect具体起到的判断作用是什么也不明白,求高人指点~
Dim a As Byte
Dim b As Byte
a = 3: b = 6
Debug.Print a And b '与运算 值应该是2
multiline设置为truePrivate Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)Dim FF As IntegerFF = FreeFileDim a As String
Dim b As StringMe.Caption = Data.Files.Item(1)Open Data.Files.Item(1) For Input As #FFDo Until EOF(FF)Line Input #FF, ba = a & b & vbNewLineLoopText1.Text = aCloseEnd Sub2,可能文本拖动后的计算效果?
确实不明白那段代码,很诡异,难道是...
Sub dropfile(ByVal txt As TextBox, ByVal strfn$)
Dim ifile As Integer
ifile = FreeFile
Open strfn For Input Access Read Lock Read Write As #ifile
Dim str$, strline$
While Not EOF(ifile) And Len(str) <= 32000
Line Input #ifile, strline$
If str <> "" Then str = str & vbCrLf
str = str & strline
Wend
Close #ifile
txt.SelStart = Len(txt)
txt.SelText = str
End Sub
Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Data.GetFormat(vbCFFiles) Then
Dim vfn
For Each vfn In Data.Files
dropfile Text1, vfn
Next vfn
End If
End SubPrivate Sub Text1_OLEDragOver(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single, State As Integer)
If Data.GetFormat(vbCFFiles) Then
Effect = vbDropEffectCopy And Effect
Exit Sub
End If
Effect = vbdropeffnone
End Sub
我把完整的源代码都贴上来了 它可以同时选中多个TXT文本文件拖入TXT文本框并显示内容
当源部件决定放操作能发生,且源部件被放到目标部件时,此事件发生。注意 仅当 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=vbDropEffectNone
Else ’否则显示不可放下图标
effect = vbDropEffectNone 'vbDropEffectNone为0
End If