Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Vb6 Drag and Drop HTML data

In Visual basic 6, clipboard has various formats. To retrieve HTML data from the clipboard, this works great: https://support.microsoft.com/en-us/kb/274326

Now my question is, how can I get HTML information from dragged data and not the clipboard?

for example, I'd like to have a multi-line textbox, that when I drag content from a webpage - into the textbox - the textbox will show the HTML retrieved from the OLE Dragging information, and not as vbCFtext.

I'v tried using the same technique as in the link above but instead of GetClipboardData - use Data.GetData(RegisterClipboardFormat("HTML Format")) [which is coming from Picture1_OLEDragDrop(...] but I get an over flow error. I have searched all over the web for a solution. anybody out there?

Edited: The above was answered, Thanks!

Adding: Thank you very much! What would be the right way now to reverse that? meaning, to drag from a text box (that contains HTML) - and set it for dragging in HTML mode?

when I simply use this:

Private Sub Text1_OLEStartDrag(Data As DataObject, AllowedEffects As Long) 'Data.SetData StrConv(Text1.Text, vbFromUnicode), (CF_HTML) Data.SetData Text1.Text, (CF_HTML) End Sub

I get an error: "Non-intrinsic OLE drag and drop formats used with SetData require Byte array data. GetData may return more bytes than were given to SetData (Error 675)"

What would be the accurate way to send back the data? and note that in could have Unicode characters. will I have to use memory copy and others to get this to work? I'l appreciate your help very much!

like image 545
Rami Treistman Avatar asked Dec 03 '25 17:12

Rami Treistman


1 Answers

Your problem is that RegisterClipboardFormat returns a Long (actually a uint), but clipboard formats are ushort (unsigned integer) values. Since we have no such type in VB6, our DataObject types expect Integer values. Thus we have to play a few more games:

Option Explicit

Private Declare Function RegisterClipboardFormat Lib "user32" _
    Alias "RegisterClipboardFormatW" ( _
    ByVal lpString As Long) As Long

Private CF_HTML As Integer

Private Sub Form_Initialize()
    Dim Temp As Long

    Temp = RegisterClipboardFormat(StrPtr("HTML Format"))
    CF_HTML = CInt(Temp And &H7FFF&) Or IIf(Temp And &H8000&, &H8000, 0)
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 Effect And vbDropEffectCopy Then
        Text1.Text = StrConv(Data.GetData(CF_HTML), vbUnicode)
    End If
End Sub

Private 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(CF_HTML) Then
        Effect = vbDropEffectCopy
    Else
        Effect = vbDropEffectNone
    End If
End Sub
like image 162
Bob77 Avatar answered Dec 06 '25 17:12

Bob77



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!