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 03.07.2001

Diese Seite wurde zuletzt aktualisiert am 03.07.2001
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-gezogene Dateien

Zurück...


Anzeige

(-hg) mailto:hg_oledragfiles@aboutvb.de

Die Phalanx der OLE-Drag&Drop-Ereignisse ist auf den ersten Blick sicher ziemlich verwirrend. Doch wenn Sie das Geschehen erst einmal verstanden haben, können Sie die Technik in Ihren Anwendungen vielfältig nutzen und dem Anwender das aus vielen professionellen Anwendungen gewohnte Feeling beim Ziehen und Ablegen von Daten bieten.

Im einfachsten Fall fügen Sie die zu kopierenden oder verschiebenden Daten gleich im OLEStartDrag-Ereignis in das übergebene Data-Objekt ein. Wollen Sie allerdings mehrere Formate unterstützen - zu diesem Zeitpunkt steht das vom Ziel gewünschte Datenformat ja noch nicht fest -, oder ist die Datenmenge so umfangreich, dass es sinnvoller ist, diese nur einzufügen, wenn tatsächlich ein Ziel gefunden wurde, das die Daten anfordert, können sie die Daten auch an anderer Stelle einfügen. Dazu wird das OLESetData-Ereignis zur Verfügung gestellt.

Allerdings wird das OLESetData-Ereignis im Laufe der Zieh-Operation mehrfach ausgelöst, so dass es gar nicht so einfach ist, den tatsächlich idealen Zeitpunkt zum Einfügen der Daten ins Data-Objekt zu erwischen. Doch wenn Sie sich einmal die Ereignisfolge näher ansehen (dazu am besten einfach Debug.Print-Anweisungen zur Ausgabe des Ereignisnamens in die Ereignisprozeduren von OLEGiveFeedback, OLESetData und OLECompleteDrag einfügen), werden Sie doch eine gewisse Regelmäßigkeit feststellen.

Werden beispielsweise Dateien in ein Explorer-Fenster, auf den Desktop oder in ein anderes Ziel, das Explorer(-Shell)-Funktionalität bietet, kopiert oder verschoben, wird das OLESetData zwar zwischendurch mehrmals ausgelöst - aber doch nur einmal oder zweimal direkt hintereinander. Dazwischen wird viel häufiger das OLEGiveFeedback-Ereignis ausgelöst. Doch unmittelbar vor dem abschließenden OLECompleteDrag-Ereignis wird eine regelrechte Salve von OLESetData-Ereignissen gefeuert - ein halbes Dutzend mal oder mehr.

Eine typische Ereignisfolge könnte etwa wie folgt aussehen (die OLEDragOver-Ereignisse sind nicht angeführt, da sie in diesem Zusammenhang nicht relevant sind):

OLEStartDrag
OLEGiveFeedback
OLESetData
OLEGiveFeedback
OLEGiveFeedback
...
OLEGiveFeedback
OLEGiveFeedback
OLESetData
OLEGiveFeedback
OLEGiveFeedback
...
OLEGiveFeedback
OLEGiveFeedback
OLESetData
OLESetData
OLESetData
OLESetData
OLESetData
OLESetData
OLECompleteDrag

Nun brauchen Sie nur noch die OLESetData-Ereignisse in einer modulweiten Hilfsvariablen mitzuzählen, und diese Hilfsvariable in jedem OLEGiveFeedback auf 0 zurück zu setzen. Im OLESetData-Ereignis prüfen Sie nun, ob eine gewisse Mindestanzahl Auslösungen stattgefunden hat - damit haben Sie den passenden Zeitpunkt zur Übergabe Ihrer Dateiliste an das Data-Objekt gefunden. Und für den Fall, dass das OLESetData-Ereignis danach nochmals ausgelöst werden sollte, setzen Sie nach der Übergabe der Daten den Zähler wieder auf 0 zurück.

Das folgende kurze Beispiel zeigt, wie dies bei einem Ziehvorgang aus einem Form heraus aussehen könnte:

Private mSetDataCount As Integer

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _
 X As Single, Y As Single)

  Me.OLEDrag
End Sub

Private Sub Form_OLEGiveFeedback(Effect As Long, _
 DefaultCursors As Boolean)

  mSetDataCount = 0
End Sub

Private Sub Form_OLESetData(Data As DataObject, _
 DataFormat As Integer)

  mSetDataCount = mSetDataCount + 1
  If mSetDataCount >= 5 Then
    'Data.Files.Add ...
    mSetDataCount = 0
  End If
End Sub

Private Sub Form_OLEStartDrag(Data As DataObject, _
 AllowedEffects As Long)

  Data.SetData , vbCFFiles
  AllowedEffects = vbDropEffectCopy
  mSetDataCount = 0
End Sub

Beispiel-Projekt OLEDragFiles (oledragfiles.zip - ca. 2,3 KB)


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

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