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 11.04.2000

Diese Seite wurde zuletzt aktualisiert am 11.04.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 Parole

Zurück...


Anzeige

(-hg) mailto:hg_oledragprivate@aboutvb.de

Im Gegensatz zu seinem Drag&Drop-Urahn in Visual Basic ist die OLE-Drag&Drop-Technik als modernere, aber um einiges komplizierte Variante hervorragend für den Datenaustausch zwischen verschiedenen Anwendungen geeignet (siehe auch: OLE-gedroppte Dateien"OLE-gedroppte Dateien"). Beliebige Daten oder Dateilisten, und selbst Objekte und Objektstrukturen, lassen sich über das als "Kofferraum" dienende Data-Objekt hin und her transportieren - das ist ein weiterer Fortschritt gegenüber dem Urahn. Dieser Fortschritt scheint jedoch auch seinen Preis zu haben: Die paar Datenformate, die das OLE-Drag&Drop in VB zu kennen scheint, kennen auch viele andere Anwendungen. Vor allem dann, wenn Datenpäckchen im reinen Textformat (vbCFText) über oder gar auf die OLE-Drag&Drop-sensibilisierten Steuerelemente Ihrer Anwendung gezogen werden, können Sie in Ihrer Anwendung offensichtlich kaum die Herkunft und die tatsächliche Erwünschtheit der Daten kontrollieren.

Sie merken es schon: Ich rede wieder einmal von "scheint", "offensichtlich" und dergleichen. Und Sie ahnen auch ganz richtig: Es gibt Möglichkeiten, die OLE-Drag&Drop-Kommunikation ganz privat und abgeschottet innerhalb einer Anwendung oder zumindest zwischen "befreundeten" Anwendungen zu nutzen. Ihre Anwendung und deren Freundeskreis brauchen sich dazu lediglich einer "Geheimsprache" bedienen - nämlich sowohl eigener Datenformate als auch eigener Kennungen für die DropEffect-Meldungen in den beteiligten OLDDrag-Ereignissen.

Dass Sie eigene Datenformate verwenden können, ist Ihnen vielleicht schon bekannt. Schließlich weist die VB-Hilfe selbst darauf hin, jedoch etwas kryptisch und recht wenig erhellend (Den Einsatz eines eigenen Datenformats habe ich Ihnen auch schon beiläufig im Artikel OLE-Drag&Drop mit Objekten"OLE-Drag&Drop mit Objekten" vorgeführt). Bei den DropEffect-Kennungen klingt der Tonfall der VB-Hilfe allerdings erheblich rigoroser, wenn da fest und ohne wenn und aber behauptet wird, man müsse eine der vorgegebenen Konstanten verwenden.

Falls Sie bereits ein wenig Erfahrung mit OLE-Drag&Drop haben, sei es aus der praktischen Nutzung oder aus Experimenten, werden Sie sicher schon festgestellt haben, dass als Effect-Werte hin und wieder ungewöhnliche Werte bzw. Konstanten-Kombinationen mit unbekannten Bitmuster-Anteilen eingeschleust werden. So kennt auf der einen Seite etwa der Explorer (alias Desktop, alias Shell) eine Kennung, die anzeigt, dass neben dem Kopieren und Verschieben auch das Anlegen einer Verknüpfung mit einer im Data-Objekt mitgelieferten Datei möglich sein könnte. Auf der anderen Seite scheint es wohl kaum eine konkrete Verwendung für die dennoch im VB-Objekt-Katalog ausdrücklich angeführte Effect-Kennung vbDropEffectScroll zu geben.

Das Prinzip der "Geheimsprache" für ein privates OLE-Drag&Drop-Vergnügen ist also eigentlich ganz einfach. Sie definieren Ihre eigenen Kennungen für Datenformate und Drop-Effekte - und schon haben Sie Ruhe vor der Klinkenputzerei anderer Anwendungen. Allerdings ist das nicht ganz dasselbe wie ein "Bitte nicht stören"-Anhänger an der Klinke einer Hotel-Zimmertür. Denn die OLEDrag-Ereignisse werden nach wie vor ausgelöst, wenn fremde Datenpäckchen über Ihre Anwendung hinwegfegen oder um Aufnahme bitten. Die Kennungen sorgen lediglich dafür, dass nur die Daten Einlass finden und berücksichtigt werden, die die richtige Parole kennen.

Die folgenden Implementierungsbeispiele der OLEDrag-Ereignisse zeigen Ihnen die "richtigen" Stellen, an denen Sie die Parolen ausgeben und abfragen sollten. Zugleich zeige ich Ihnen hier auch, wie Sie eigene Mauszeiger ins Spiel bringen und wie Sie diese im gleichen Sinne voll privatisieren können.

Private Sub MyControl_MouseDown(Button As Integer, _
 Shift As Integer, x As Single, y As Single)

  Set Screen.MouseIcon = MyIcon
End Sub

Private Sub MyControl_MouseUp(Button As Integer, _
 Shift As Integer, x As Single, y As Single)

  With Screen
    .MousePointer = vbDefault
    Set .MouseIcon = Nothing
  End With
End Sub

Private Sub MyControl_OLECompleteDrag(Effect As Long)
  With Screen
    .MousePointer = vbDefault
    Set .MouseIcon = Nothing
  End With
  If Effect = &H800000 Then
    '...
  End If
End Sub

Private Sub MyControl_OLEDragDrop(Data As DataObject, _
 Effect As Long, Button As Integer, Shift As Integer, _
 x As Single, y As Single)

  MyData As Variant
  
  If Data.GetFormat(9999) Then
    '...
    'z.B.:
    MyData = Data.GetData(9999)
  End If
End Sub

Private Sub MyControl_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(9999) Then
    Effect = &H800000
  Else
    Effect = vbDropEffectNone
  End If
End Sub

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

  If Effect = &H800000 Then
    Screen.MousePointer = vbCustom
    DefaultCursors = False
  Else
    DefaultCursors = True
  End If
End Sub

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

  If DataFormat = 9999 Then
    '...
  End If
End Sub

Private Sub MyControl_OLEStartDrag( _
 Data As MSComctlLib.DataObject, AllowedEffects As Long)

  Data.SetData , 9999
  AllowedEffects = &H800000
End Sub

Modul modOLEDragPrivate (modOLEDragPrivate.bas - ca. 1,9 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