|
Sie suchen nach einer Möglichkeit, nahezu beliebige Daten und sogar Objekte in einem eigenen Format der Zwischenablage ablegen und auch wieder aus dieser auslesen zu können? Dazu gibt es eine Reihe von API-Funktionen, die jedoch aus Visual Basic-Sicht nicht ganz einfach handzuhaben sind. Und es gibt das VB-PropertyBag-Objekt, das Sie ab Visual Basic 6 selbst instanzieren können.
Wenn Ihnen ein paar wenige Zeilen Code und reine Bordmittel recht sind, sollten Sie sich einfach das folgende einmal anschauen:
Public Sub ClipboardSetPropertyBag(PropBag As PropertyBag, _
ID As Variant)
Dim nString As String
Dim nBytes() As Byte
PropBag.WriteProperty "§ID§", ID
nBytes = PropBag.Contents
nString = nBytes
nString = StrConv(nString, vbUnicode)
nString = Replace(nString, vbNullChar, "§%§%§%§%§%§%§%§%")
With Clipboard
.Clear
.SetText nString, vbCFText
End With
End Sub
Public Function ClipboardSetPropertyBag(ID As Variant) _
As PropertyBag
Dim nPropBag As PropertyBag
Dim nString As String
Dim nBytes() As Byte
Dim nVar As Variant
nString = Clipboard.GetText(vbCFText)
nString = Replace(nString, "§%§%§%§%§%§%§%§%", vbNullChar)
nString = StrConv(nString, vbFromUnicode)
nBytes = nString
nVar = nBytes
Set nPropBag = New PropertyBag
On Error Resume Next
If Err.Number = 0 Then
nBag.Contents = nBytes
If nPropBag.ReadProperty("§ID§") = ID Then
Set ClipboardSetPropertyBag = nPropBag
Else
MsgBox "Ungültiges Format!"
End If
End If
End Function
Der ganze Trick besteht darin, den als Byte-Array gelieferten bzw. benötigten Inhalt des PropertyBag-Objekts zwischenzeitlich in einen String zum Transport über die Zwischenablage zu überführen. Den Byte-Array-Inhalt des Sammel-PropertyBag-Objekts weisen Sie zunächst einfach einem String zu bzw. weisen den aus der Zwischenablage kommenden String über eine Zwischenstation als Byte-Array wieder einem PropertyBag-Objekt zu. Damit der Weg über den String funktioniert, ist zusätzlich seine Konvertierung ins Unicode-Format und wieder zurück notwendig. Und da der Unicode-String Nullzeichen enthält, die die Zwischenablage in C-Manier zum Kappen des Strings veranlassen, tauschen Sie die Nullzeichen zuvor noch gegen eine "unmögliche" Zeichenfolge aus und restaurieren die Nullzeichen hinterher wieder.
Damit Sie den Inhalt eines so transferierten PropertyBag-Objekts identifizieren können, fügen Sie vor dem Transfer einen ID-Wert (String, Zahl, GUID oder was auch immer) hinzu und prüfen, ob sich das gerade abgeholte PropertyBag-Objekt mit dieser ID zu erkennen geben kann.
|