| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1342 人关注过本帖
标题:以下代码为何不能实现从PICTURE控件通过人工OLE拖放到图形按钮1上呢?
取消只看楼主 加入收藏
ba_wang_mao
Rank: 2
来 自:成都理工大学
等 级:论坛游民
帖 子:297
专家分:27
注 册:2006-11-7
收藏
 问题点数:0 回复次数:5 
以下代码为何不能实现从PICTURE控件通过人工OLE拖放到图形按钮1上呢?
Private Sub Form_Load()
'Picture1.OLEDragMode = 0  '手动拖动
'Picture1.OLEDropMode = 0  '不可放下
Command1.OLEDropMode = 1  '手动放下
End Sub
'常用的方法有OLEGrag 方法。
'通过调用OLEGrag 方法来启动手工拖动。
'OLEGrag 方法没有参数,用于启动手工拖动,然后触发OLEstartDrag 事件来设置拖动的条件。
'OLEGrag 方法的调用通常在拖动源的MouseMove事件过程中,当用户选定数据并按住鼠标时就会触发OLEstartDrag 事件。
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Picture1.OLEDrag '启动手工拖动
End Sub
'(1)OLEStartDrag 事件
'   OLEStartDrag 事件是在拖放源选定数据并按下鼠标键拖动数据时触发的
'语法:
 '   Private Sub 对象_OLEStartDrag(Data As DataObject, Allowedeffects As Long)
'其中:
'·Data:      确定拖动源所提供的数据格式以及相应的数据?
'·Allowedeffects :确定允许的放下效果,目标可以通过向拖动源查询此信息来作相应的响应。
'       0(vbDropEffectNone)为不允许放下,
'       1(vbDropEffectcopy)为允许复制,
'       2(vbDropEffectMove )为允许移动。
Private Sub picture1_OLEStartDrag(Data As DataObject, Allowedeffects As Long) '指定拖动效果和数据格式
Allowedeffects = 2 Or 1                 ' 确定放下效果=允许移动、允许复制
Data.SetData , 2                        ' 确定拖动源所提供的数据格式及相应的数据(其中1:代表文本,2代表位图BMP)
End Sub
'(2)OLEDragover 事件
'  OLEDragover 事件是当拖动源在目标上拖动时由目标触发的,在拖放期间OLE拖放自动提供鼠标指针形状。如果想对鼠标指针形状进行控制,在目标的OLEDragover 事件和拖放源的OLEGiveFeedback 事件中编程实现。
'语法:
'    Private Sub 对象_OLEDragover(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single, State As Integer)
'其中:
'·Data:     含有拖动源提供的数据格式?
'·Effect:通知拖动源目标支持的放下效果。0(vbDropEffectNone)为不支持放下,1(vbDropEffectCopy)为支持复制,2(vbDropEffectMove)为支持移动,&H80000000&(vbDropEffectScroll)为滚动正在或将要发生。
'    ·Button?Shift?X?Y参数与前面介绍的相同?
Private Sub Command1_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(vbCFBitmap) Then
   Effect = vbDropEffectCopy And Effect '显示可以放下的图标,是带小加号的那种
Else
   Effect = vbDropEffectNone            '否则显示不可放下的图标,是园圈加斜线那种
End If
End Sub
'(3)OLEGiveFeedback事件
'  当触发目标的OLEDragOver事件时,
'    OLEDrapOver事件的Effect参数通知拖动源支持那种放下操作,然后触发拖动源的OLEGiveFeedback事件。
'语法:
'  Pivate Sub对象OLEGiveFeedback(Effect As Long,Defaultcursors As Boolean)
'其中:
'  ·Effect:指出目标支持的操作类型,与OLEDragOver事件中参数含义相同。
'  ·Defaultcursors:表示是否使用默认的鼠标图标。True则使用,False则不使用鼠标图标而用MousePointer来设定。
Private Sub Picture1_OLEGiveFedback(Effect As Long, DefaultCursors As Boolean) '设置鼠标形状支持哪种放下操作
DefaultCursors = True  '鼠标图标用MousePointer来设定
'Select Case Effect
'     Case 0
'          Screen.MousePoint = 12
'     Case 1
'          Screen.MousePoint = 4
'     Case 2
'          Screen.MousePointer = 4
'     Case Else
'          Default Cursors = True
'End Select
End Sub

'(4)OLEDrapDrop事件
'  OLEDragDrop事件是当拖动源放到放下目标时触发的,目标将根据拖动源所含有的数居格式查询拖动源,然后获取数据或拒绝数据。
'语法:
'  Private Sub对象OLEDragDrop(Data As DataObject,Effect As Long,Button As Integer,Shift As Integer, X As Single ,Y As Single)
'其中:
'  Data包含源所提供的数据格式,
'    Effect通知源目标执行的操作类型,
'    Button确定鼠标键为状态,
'    Shift确定是否按下Shift、Ctrl、Alt键。
Private Sub Command1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) '将拖动内容送到Text2
If Data.GetFormat(vbCFBitmap) Then
   Command1.Picture = Data.GetData(vbCFBitmap)    ' 语法  对象.GetData (格式)
   Effect = 1
End If
End Sub
'(5)OLESetData事件
'  当目标用GetData方法从拖动源获取数据,还未加载数据时拖动源触发OLESetData事件。
'语法:
'  Private Sub对象_OLESetData(Data As DataObject,Dataformat As Integer)
Private Sub Command1_OLESetData(Data As DataObject, DataFormat As Integer) '将选定内容传送到DataObject 对象中
'If DataFormat = 2 Then
    Data.SetData Picture1.Picture, 2               ' 语法  对象.SetData [数据] , [格式]
'End If
End Sub
'(6)OLEComplete事件
'  OLEComplete事件是当拖动源放到目标上或取消OLE拖放时触发的,这是拖放操作中的最后一个事件。
'语法:
'    Private Sub对象_MLECompleteDrag([Effect As Long])
Private Sub Picture1_OLECompleteDrag(Effect As Long)
'If Effect = 2 Then
'End If
'Screen.MousePointer = 0
End Sub
搜索更多相关主题的帖子: OLE PICTURE 图形 控件 拖动 
2008-02-20 10:59
ba_wang_mao
Rank: 2
来 自:成都理工大学
等 级:论坛游民
帖 子:297
专家分:27
注 册:2006-11-7
收藏
得分:0 
运行后显示:
  实时错误‘676’
  所需数据在OLESetData事件过程中未提供给DataObject。
  我已经在事件Command1_OLESetData()中设置了呀!

多年以来还在MSDOS、单片机下搞嵌入式编程,对WINDOWS编程一窍不通,很想了解WINDOWS下病毒编程技术。
2008-02-20 11:02
ba_wang_mao
Rank: 2
来 自:成都理工大学
等 级:论坛游民
帖 子:297
专家分:27
注 册:2006-11-7
收藏
得分:0 
图片如下:
图片如下

OLE拖放.JPG (104.61 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册

多年以来还在MSDOS、单片机下搞嵌入式编程,对WINDOWS编程一窍不通,很想了解WINDOWS下病毒编程技术。
2008-02-20 11:09
ba_wang_mao
Rank: 2
来 自:成都理工大学
等 级:论坛游民
帖 子:297
专家分:27
注 册:2006-11-7
收藏
得分:0 
破网站,基本上没有回贴的。

多年以来还在MSDOS、单片机下搞嵌入式编程,对WINDOWS编程一窍不通,很想了解WINDOWS下病毒编程技术。
2008-02-20 11:54
ba_wang_mao
Rank: 2
来 自:成都理工大学
等 级:论坛游民
帖 子:297
专家分:27
注 册:2006-11-7
收藏
得分:0 
自力更生
Dim Focus As Integer
Private Sub Form_Load()
    Command1.OLEDropMode = 1  '手动放下
    Focus = 0
End Sub

'==================================================================================================
' COMMAND1
'==================================================================================================
Private Sub Command1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Data.GetFormat(vbCFBitmap) Then
   Command1.Picture = Data.GetData(vbCFBitmap)  ' 语法  对象.GetData (格式)
   Effect = 1
End If
End Sub

Private Sub Command1_OLESetData(Data As DataObject, DataFormat As Integer) '将选定内容传送到DataObject 对象中
If Focus = 1 Then
   Data.SetData Picture3.Picture  ' 语法  对象.SetData [数据] , [格式]
ElseIf Focus = 2 Then
   Data.SetData Picture4.Picture
End If
End Sub

Private Sub Command1_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(vbCFBitmap) Then
   Effect = vbDropEffectCopy And Effect '显示可以放下的图标,是带小加号的那种
Else
   Effect = vbDropEffectNone            '否则显示不可放下的图标,是园圈加斜线那种
End If
End Sub

'==================================================================================================
' PICTURE1
'==================================================================================================
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Picture1.OLEDrag '启动手工拖动
End Sub

Private Sub picture1_OLEStartDrag(Data As DataObject, Allowedeffects As Long) '指定拖动效果和数据格式
Allowedeffects = 2 Or 1
Data.SetData Picture3.Picture, 2  ' 确定拖动源所提供的数据格式及相应的数据(2代表位图BMP)
Focus = 1
End Sub

'==================================================================================================
' PICTURE2
'==================================================================================================
Private Sub Picture2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Picture2.OLEDrag '启动手工拖动
End Sub

Private Sub picture2_OLEStartDrag(Data As DataObject, Allowedeffects As Long)
Allowedeffects = 2 Or 1                 ' 确定放下效果=允许移动、允许复制
Data.SetData Picture4.Picture, 2
Focus = 2
End Sub

多年以来还在MSDOS、单片机下搞嵌入式编程,对WINDOWS编程一窍不通,很想了解WINDOWS下病毒编程技术。
2008-02-21 09:32
ba_wang_mao
Rank: 2
来 自:成都理工大学
等 级:论坛游民
帖 子:297
专家分:27
注 册:2006-11-7
收藏
得分:0 
界面如下
界面如下

未命名11.JPG (79.46 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册

多年以来还在MSDOS、单片机下搞嵌入式编程,对WINDOWS编程一窍不通,很想了解WINDOWS下病毒编程技术。
2008-02-21 09:35
快速回复:以下代码为何不能实现从PICTURE控件通过人工OLE拖放到图形按钮1上呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018659 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved