ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 30.03.2000

Diese Seite wurde zuletzt aktualisiert am 30.03.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

OLE-Drag&Drop mit Objekten

Zurück...


Anzeige

(-hg) mailto:hg_oledragobject@aboutvb.de

Wenn Sie sich bereits mit dem OLE-Drag&Drop-Mechanismus beschäftigt haben, werden Sie sich vielleicht gefragt haben, wie Sie nicht nur Text-Strings, Picture-Objekte oder Dateinamen bzw. -Listen, sondern vielleicht komplette Objekte über das die Daten transportierende Data-Objekt verschicken können.

In der Visual Basic-Dokumentation steht dazu, dass auch andere Werte anstelle der vorgegebenen Clipboard-Format-Konstanten als Format gesetzt werden können. Dann können die zu transportierenden Daten allerdings nur als Byte-Array an die Methode SetData des Data-Objekts übergeben, und umgekehrt auch wieder nur als Byte-Array ausgelesen werden. Sie brauchen Ihre Objekte also nur irgendwie in ein Byte-Array zu packen.

Irgendwie? Ja, wie denn? Das ist gar nicht so schwierig: Seit Visual Basic 6 können Sie selber Instanzen eines PropertyBag-Objekts anlegen und serialisierbare Objekte direkt als Daten-Packet dort hineinschreiben. Die Contents-Eigenschaft des PropertyBag-Objekts liefert Ihnen dann den Inhalt als Byte-Array (siehe auch Bilder zu Bytes"Bilder zu Bytes"). Dieses Byte-Array können Sie nun der SetData-Methode des Data-Objekts mit der Angabe Ihres eigenen Formats übergeben.

Private Sub Quelle_OLEStartDrag(Data As DataObject, ...)
  ' ...
  With New PropertyBag
    .WriteProperty "MeinObjekt", MyObject
    Data.SetData .Contents, constMeinFormat 
  End With
  ' ...
End Sub

Wenn das Ziel Ihr Format kennt, kann es selbst wieder ein leeres PropertyBag-Objekt instanzieren und die über die GetData-Methode mit Angabe des Formats das Byte-Array aus dem Data-Objekt wieder hervorholen und der Contents-Eigenschaft des neuen PropertyBag-Objekts zuweisen. Dann kann es unter der Angabe des Schlüssels, den es natürlich ebenfalls kennen muss, das transportierte Objekt aus dem PropertyBag-Objekt auslesen.

Private Sub Ziel_OLEDragDrop(Data As DataObject, ...)
  ' ...
  If Data.GetFormat(constMeinFormat) Then
    With New PropertyBag
      .Contents = Data.GetData(constMeinFormat)
      Set MyObject = .ReadProperty("MeinObjekt")
    End With
  End If
  ' ...
End Sub

Voraussetzung ist natürlich, dass sich das Objekt selbst serialisieren kann (etwa wie das Picture- und das Font-Objekt das können). Seit Visual Basic 6 setzen Sie dazu bei öffentlichen Klassen in einem ActiveX-Objekt die Eigenschaft Persistable auf "1 - Persistable". Dann erhalten Sie für diese Klasse u.a. die zusätzlichen Ereignisse Class_ReadProperties und Class_WriteProperties, in denen Sie, ähnlich wie in einem UserControl, die internen Daten Ihrer Klasse in ein PropertyBag-Objekt hineinschreiben und daraus wieder herauslesen können.

Dieses den Ereignissen übergebene PropertyBag-Objekt ist jedoch nicht das oben erwähnte! Es wird vielmehr von Visual Basic im Hintergrund angelegt und dient nur zur Umsetzung des eingebauten Serialisierungs-Mechanismus von Klassen. Allerdings steckt das gleiche Prinzip dahinter - in das von Ihnen instanzierte PropertyBag-Objekt wird nämlich wiederum nichts anderes als der Byte-Array-Inhalt des hier den Ereignissen übergebenen PropertyBag-Objekts hineingeschrieben und wieder ausgelesen.

Über das von Ihnen instanzierte PropertyBag-Objekt können Sie natürlich auch beliebige Daten in nahezu beliebiger Menge und Vielfalt an das Data-Objekt übergeben. Das können etwa mehrere Objekte auf einmal oder sogar komplexe Collection- oder Array-Strukturen sein (siehe Verschachtelte Schachteln"Verschachtelte Schachteln").

Das Beispiel-Projekt OLEDragObjectTest, das Sie zu diesem Artikel herunterladen können, zeigt Ihnen, wie das insgesamt und konkret realisiert werden kann.


Beispiel-Projekt OLEDragObjectTest (oledragobject.zip - ca. 5,7 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikel

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer