SetData-Methode mit RegisterClipboardFormat

23/10/2009 - 10:41 von Donald Lessau | Report spam
Hallo,

ich dragge Dateien von VB. Wenn ich die Dateien so zum DataObject hinzufüge,
dann klappt das auch...

Data.SetData , vbCFFiles
For i = 0 To UBound(sFile)
Data.Files.Add sFile(i)
Next

... aber das DataObject enthàlt dann nur CF_HDROP, wàhrend gewisse andere
Dinge fehlen, die dort zu finden sind wenn man zB vom Explorer aus draggt,
u.a. "FileName", "FileNameW", und "Shell IDList Array" (làsst sich mit
ClipSpy sehen).

Nun steht in der Hilfe unter SetData:







Die Methoden GetData und SetData können andere als die unter
Einstellungen aufgeführten Datenformate verwenden, wie u.a.
benutzerdefinierte Formate, die in Windows über die API-Funktion
RegisterClipboardFormat() registriert sind. Hier gibt es jedoch einige
Einschrànkungen:

Für die SetData-Methode müssen die Daten in einem Byte-Datenfeld
vorliegen, wenn das angegebene Datenformat nicht erkannt wird.
<<

Das habe ich versucht -- klappt aber nicht. :(

Private bFileName() As Byte
Private CF_FileName As Integer
Private Declare Function RegisterClipboardFormat Lib "user32" Alias _
"RegisterClipboardFormatA" (ByVal lpString As String) As Long
...

' in _OLEStartDrag
' 0xC006
If CF_FileName = 0 Then
CF_FileName = RegisterClipboardFormat("FileName") And &H7FFF& Or &H8000
End If
Data.SetData , CF_FileName

' in _OLESetData
bFileName = StrConv(sFile(0) & vbNullChar, vbFromUnicode)
Data.SetData bFileName, CF_FileName

Das Format "FileName" ist nun zwar in ClipSpy aufgeführt, aber die Daten
sind "unavailable". Was mache ich da falsch?

TIA,
Donald
 

Lesen sie die antworten

#1 Donald Lessau
09/11/2009 - 22:21 | Warnen spam
"Donald Lessau" schrieb im Newsbeitrag
news:%
...
Das Format "FileName" ist nun zwar in ClipSpy aufgeführt, aber die Daten
sind "unavailable". Was mache ich da falsch?




Nix! Ist ein ClipSpy bug.

Donald himself

Ähnliche fragen