VSFlexGrid Tutorials > OLE Drag and Drop Demo > Step 4: Manual OLE Drop |
We will customize the behavior of the fgDDManual control as an OLE drop target so that when a list of files is dropped, it opens the first file on the list and displays the contents of the first 10 lines in that file. (The default behavior is to treat lists of files as text, and paste the file names.)
When the user drops an OLE data object on a VSFlexGrid control with the OLEDropMode property set to flexOLEDropManual, the control fires the OLEDragDrop event. The data object being dropped is passed as a parameter (Data) that you may query for the type of data you want.
The routine below checks to see if Data contains a list of files. If so, it opens the first file on the list and reads the contents of its first 10 lines. If the Data parameter does not contain any files, then the routine tries to get its text contents. Either way, the routine transfers the data to the grid using the Clip property.
Here is the routine:
Example Title |
Copy Code
|
---|---|
Private Sub fgDDManual_OLEDragDrop(Data As VSFlex8Ctl.vsDataObject, _ Effect As Long, _ ByVal Button As Integer, _ ByVal Shift As Integer, _ ByVal X As Single, ByVal Y As Single) Dim r As Long, c As Long, i As Integer, s As String With fgDDManual ' get drop location r = .MouseRow c = .MouseCol ' if we're dropping files, open the file ' and paste contents If Data.FileCount > 0 Then On Error Resume Next Open Data.Files(0) For Input As #1 For i = 0 To 10 Line Input #1, s .Cell(flexcpText, r + i, c) = s Next Close #1 ' drop text using the Clip property ElseIf Data.GetFormat(vbCFText) Then s = Data.GetData(vbCFText) .Select r, c, .Rows - 1, .Cols - 1 .Clip = s .Select r, c ' we don't accept anything else Else MsgBox "Sorry, we only accept text and files..." End If End With End Sub |
That concludes this demo. Run the project again and try dragging and dropping between the controls and other applications.