OLE 拖放 DataObject 对象

OLE 拖放使用的源、目标模型与“拖放”一节中讨论的简单事件驱动拖放技术使用的模型相同。但在这种情况下并不是将一个控件拖动到另一个控件以调用某些代码;而是将一个控件或应用程序中的数据移动到另一个控件或应用程序中。例如,用户选定 Excel()中的一列单元并将它们拖动到应用程序的 DBGrid 控件(目标)中。

在 Visual Basic 中,数据的媒介或存储处是 DataObject 对象─ 这意味着通过它将数据从源移动到目标。为了做到这一点,DataObject 对象提供了为存储、获取与分析数据所需的方法。下表列出了 DataObject 对象使用的属性及方法:

类别 项目 描述
属性 Files 保存出入于 Windows Explorer 的被拖动的文件名。
方法 Clear 清除 DataObject 对象的内容。
  GetData 从 DataObject 对象中获取数据。
  GetFormat 判断在 DataObject 中是否可用特定数据格式。
  SetData 将数据放到 DataObject 对象中,或指出,在请求时可用的特定格式。

将这些方法与 OLE 拖放事件并用就可管理源端和目标端(若两端均在 Visual Basic 应用程序中的话)的 DataObject 对象中的数据。例如,可用 SetData 方法将数据放到源端的 DataObject 对象中,然后用 GetData 方法接受目标端的数据。

在触发 OLEStartDrag 事件时可用 Clear 方法清除 DataObject 对象的内容。当用自动拖动操作从控件拖动数据时,在触发 OLEStartDrag 事件之前就把数据格式放到 DataObject 对象中。若不希望使用缺省数据格式,则请用 Clear 方法。若希望在缺省数据格式的基础上添加数据,则不使用 Clear 方法。

通过 Files 属性可存储一列文件名,这些文件能被拖动到拖放目标。关于此属性的详细信息,请参阅“从 Windows‘资源管理器’中拖动文件”。

还可指定要传送数据的格式。SetData 和 GetData 方法使用下述参数将数据放到 DataObject 对象或从 DataObject 对象中获取数据:

参数 描述
Data 用来指定放到 DataObject 对象中的数据类型(如果设置了 format 参数,则此项是可选参数;否则,此项是必要参数)。
Format 允许设置若干可由源支持的不同格式,而无需对每种格式都加载数据。(若设置了 data 参数或 Visual Basic 能够处理数据格式,则此项是可选的参数;否则此项是必要的参数)。

注意 当把数据放到目标而未指定格式时,Visual Basic 能够检测数据是否为位图、元文件、增强型的元文件或文本。必须明确指定所有其它格式,否则将产生错误。

format 参数使用下述常数或数值指定数据的格式:

常数 意义
VbCFText 1 文本
VbCFBitmap 2 位图 (.bmp)
VbCFMetafile 3 元文件 (.wmf)
VbCFEMetafile 14 增强型元文件 (.emf)
VbCFDIB 8 与设备无关的位图 (.dib or .bmp)
VbCFPalette 9 调色板
VbCFFiles 15 文件列表
VbCFRTF -16639 丰富文本格式 (.rtf)

SetData、GetData 和 GetFormat 方法使用 data 参数和 format 参数返回 DataObject 对象中的数据类型,或者,如果格式与目标兼容,则获取数据。例如:

Private Sub txtSource_OLEStartDrag(Data As _ 
      VB.DataObject, AllowedEffects As Long)
   Data.SetData txtSource.SelText, vbCFText
End Sub

本例中,数据是在文本框中选定的文本,指定的格式是文本 (vbCFText)。

注意 在大多数情况下应使用 vbCFDIB 数据格式而不使用 vbCFBitmap 和 vbCFPalette。vbCFDIB 格式包含位图和调色板,因此是传送位图图象的首选方法。但是,因顾及完整性也可指定 vbCFBitmap 和 vbCFPalette。如果决定不使用 vbCFDIB 格式,则必须同时指定 vbCFBitmap 和 vbCFPalette 格式,使得能够将位图与调色板正确地放入 DataObject 对象。

详细信息 关于定义自己的数据格式的信息,请参阅“创建自定义数据格式”。