Navigation: Konzepte und Verfahren >

Drag&Drop

Diese Seite drucken
Vorherige Seite Nächste Seite
Zurück zur Kapitelübersicht

Mit click.EXE 4.0 ist es möglich, sowohl eine sehr einfache Unterstützung für das Verschieben von Dateien aus dem Windows-Explorer auf ein Element zu realisieren.

 

Wird die Variable [DragDrop.DateiMaske] auf eine oder mehrere Dateimasken (mit Semikolons getrennt) gesetzt (z.B. *.*, *.EXE oder *.BMP;*.JPG), kann eine passende Datei in ein Eingabefeld (Anzeige-Element Eingabe) gezogen und fallengelassen werden. Die möglichen Zielelemente (außer Bezeichner) werden durch das Setzen von

[.Element(ID).DragDropZiel] = 1 festgelegt.

 

Beim Ziehen über das Element (DragOver) erfolgt das Ereignis ::Anzeige_Element(<Eingabefeldname>)_Drag

Der gezogene Dateiname steht dabei in [DragDrop.Datei]

 

Sollten mehrere Dateien verschoben worden sein, findet sich deren Anzahl in [DragDrop.DateiAnzahl] und die Namen der weiteren Dateien in [DragDrop.Datei(2)] bis [DragDrop.Datei(N)]

 

Beim Fallenlassen (Drop) erfolgt das Ereignis ::Anzeige_Element(<Eingabefeldname>)_Drop

 

Der "gedroppte" Dateiname steht dabei in [DragDrop.Datei] (ggf. weitere Namen in [DragDrop.Datei(2)] bis [DragDrop.Datei(N)])

 

 

Folgende Platzhalter stehen als [DragDrop.X] zur Verfügung:

 

.DateianzahlAnzahl der beim Drag&Drop verschobenen Dateien
.Datei(X)Auslesen der beim Drag&Drop verschobenen Datei X
.DateiListeliefert eine Liste aller per Drag&Drop verschobenen Dateien
.DateimaskeDateimaske für Drag&Drop (z.B. *.* oder *.exe) - gilt für alle Elemente; anderes Verhalten kann im Ereignis realisiert werden

 

Mit der Pro-Lizenz ist eine noch genauere Steuerung der Drag&Drop-Vorgänge möglich (siehe auch unten):

.AktionMögliche bzw. gewünschte Aktion(en) beim Drag&Drop (0=keiner, 1=Kopieren, 2=Verschieben)
.MaustasteBeim letzten Drag&Drop-Ereignis gedrückte Maustaste(n)
.UmschaltTasteBeim letzten Drag&Drop-Ereignis gedrückte Umschalttaste(n)
.XX-Position des letzten Drag&Drop-Ereignisses
.YY-Position des letzten Drag&Drop-Ereignisses
.StatusStatus des letzten Drag-Ereignisses (0=Eintritt, 1=Austritt, 2=Innerhalb)

 

.FormatDa(X)Abfrage, ob Drag&Drop-Daten des Formats X verfügbar sind
.Daten(X)Auslesen der Daten im Format X des letzten Drag-Ereignisses (siehe auch Bildquelle %DragDropBild%)
Formatwerte für X: 1=Text, 2=Bitmap, 3=Metafile, 4=RTF, 5=Dateien, 6=DDE-Link, 7=Palette, 8=DIB (oder die Windows-internen Werte)

 

.DragDatenEintragen der Daten aus der Drag&Drop-Quelle: Setzen auf Format;Daten
.DragDateiHinzufügen einer Datei aus der Drag&Drop-Quelle: Setzen auf Dateiname
.LetzteAktionTyp des zuletzt abgeschlossenen Drag&Drop (0=keiner, 1=Kopieren, 2=Verschieben)
.ErlaubteAktionVon der Quelle zugelassene Aktion(en) (1=Kopieren, 2=Verschieben, 3=beides)

 

 

Beispiel:

***  Simples Drag&Drop Bsp.

  Anzeigefenster  'Drag&Drop Demo' (B=70, H=25, zentriert, Aktivieren)

  Anzeige-Element  Eingabe: 'Bitte eine Datei über dieses Eingabefeld "legen"' (ID='DropZiel', B=60, H=13, zentriert, mehrzeilig, Schieber)

  Setze  in [DragDrop.Dateimaske]:  '*'

  Setze  in [.Element(DropZiel).DragDropZiel]:  '1'

  Warte  endlos...

  

***  Maus ist mit "festgehaltener" Datei über dem Eingabefeld

::  Anzeige_Element_DropZiel_Drag

  Anzeige-Element  Eingabe: 'Lass los! ([DragDrop.Datei])' (ID='DropZiel')

Zurück

  

***  Die Maustaste wurde über dem Eingabefeld losgelassen

::  Anzeige_Element_DropZiel_Drop

  Anzeige-Element  Eingabe: 'Brav! ;-) ([DragDrop.Datei])' (ID='DropZiel')

Zurück

 

Beispiel als cX2Web-Code:

**cX4010DD DD9F7DS214 1CMQkwCQkg U2ltcGxlcy BEcmFnJkRy b3AgQnNwLg

0KMzkJMAkJ IERyYWcmRH JvcCBEZW1v CVc3MAlIMj UJWglDDQoz OAkwCQkgQm

l0dGUgZWlu ZSBEYXRlaS D8YmVyIGRp ZXNlcyBFaW 5nYWJlZmVs ZCAibGVnZW

4iCUlEcm9w WmllbAlXNj AJSDEzCVoJ VAlNCVMNCj IyCTAJCT1E cmFnRHJvcC

5EYXRlaW1h c2tlCSAqDQ oyMgkwCQkg MQk9LkVsZW 1lbnQoRHJv cFppZWwpLk

RyYWdEcm9w WmllbA0KMz EJMAkJRQ0K MAkwCQ0KMQ kwCQkgTWF1 cyBpc3QgbW

l0ICJmZXN0 Z2VoYWx0ZW 5lciIgRGF0 ZWkg/GJlci BkZW0gRWlu Z2FiZWZlbG

QNCjE5CTAJ CSBBbnplaW dlX0VsZW1l bnRfRHJvcF ppZWxfRHJh Zw0KMzgJMA

kJIExhc3Mg bG9zISAoW0 RyYWdEcm9w LkRhdGVpXS kJSURyb3Ba aWVsCVQNCj

Q1CTAJDQow CTAJDQoxCT AJCSBEaWUg TWF1c3Rhc3 RlIHd1cmRl IPxiZXIgZG

VtIEVpbmdh YmVmZWxkIG xvc2dlbGFz c2VuDQoxOQ kwCQkgQW56 ZWlnZV9FbG

VtZW50X0Ry b3BaaWVsX0 Ryb3ANCjM4 CTAJCSBCcm F2ISA7LSkg KFtEcmFnRH

JvcC5EYXRl aV0pCUlEcm 9wWmllbAlU DQo0NQkwCQ 0K=*

 

 

Mit der Pro-Lizenz ist noch eine deutlich vielseitigere Unterstützung des Drag&Drop möglich. Hierbei können nicht nur verschiedenste Datenformate (Texte, RTF-Text, Bilder) übergeben werden, sondern es können auch click.EXE-Elemente und Listen als Drag&Drop-Quelle dienen.

 

Hierzu wird der oben beschriebene Mechanismus verwendet, wobei mehr Informationen zum jeweiligen Vorgang abrufbar und Manipulationen des Ablaufs möglich sind.

Für das Verwenden eines Elements als Quelle ([.Element(ID).DragDropQuelle] = 1) wird zudem noch ein zusätzliches Ereignis ::Anzeige_Element(ID)_DragStart ausgelöst, in dem die zu transportierenden Daten definiert werden können.

 

Alle Eingriffe in den Drag&Drop-Ablauf erfolgen über den Platzhalterbereich [DragDrop.X]. Folgende Eigenschaften X können hierbei verwendet werden:

 

.DateimaskeDateimaske(n) für Drag&Drop (z.B. *.*, *.exe oder *.bmp;*.jpg) -
Diese Vorgabe gilt für alle als Drag&Drop-Ziel definierten Elemente - ein anderes Verhalten kann im _Drag-Ereignis realisiert werden
.DateianzahlAnzahl der beim Drag&Drop verschobenen Dateien
.Datei(X)Auslesen der beim Drag&Drop verschobenen Datei X

 

.AktionMögliche bzw. gewünschte Aktionen beim Drag&Drop (0=keiner, 1=Kopieren, 2=Verschieben, 3=beides)
.MaustasteBeim letzten Drag&Drop-Ereignis gedrückte Maustaste(n)
.UmschaltTasteBeim letzten Drag&Drop-Ereignis gedrückte Umschalttaste(n)
.XX-Position des letzten Drag&Drop-Ereignisses
.YY-Position des letzten Drag&Drop-Ereignisses
.StatusStatus des letzten Drag-Ereignisses (0=Eintritt, 1=Austritt, 2=Innerhalb)
.FormatDa(X)Abfrage, ob Drag&Drop-Daten des Formats X (s.u.) verfügbar sind
.Daten(X)Auslesen der Daten im Format X (s.u.) des letzten Drag-Ereignisses (siehe auch Bildquelle %DragDropBild%)

 

Eintragen der zu verschiebenden Daten im ::Anzeige_Element(ID)_DragStart-Ereignis eines Drag&Drop-Quellelements:

.DragDatenEintragen der Daten aus der Drag&Drop-Quelle im ::Anzeige_Element(ID)_DragStart-Ereignis:
Setzen auf Format;Daten (Formate s.u.)
Setzen auf einen leeren Text löscht die gesamte Datenmenge
.DragDateiHinzufügen einer Datei aus der Drag&Drop-Quelle: Setzen auf Dateiname

 

Werden keine Daten eingetragen, findet auch kein Drag&Drop-Vorgang statt.

 

Formate:

Für die Angabe eines Datenformats (.Format(X), .Daten(X), DragDaten) stehen in der Konstanten-Liste die Werte für die unterschiedlichen, von Windows unterstützten Datenformate zur Verfügung (die Zahlenwerte sind vom Zwischenablage-System von Windows vorgegeben):

ddfText1        Text
ddfBitmap2        Bitmap
ddfMetafile3        Metafile (.wmf)
ddfRTF4        RichText Format (.rtf)
ddfDateien5        Dateiliste
ddfDDE6        DDE-Link
ddfPalette7        Palette
ddfDIB8        Geräteunabhängige Bitmap (DIB)
ddfEMetafile14        Enhanced Metafile (.emf)

 

 

Folgende Ereignisse werden bei einem Drag&Drop-Vorgang ausgelöst:

::  Anzeige_Element(Quelle)_DragStarttritt für das Quellelement (DragDropQuelle-Eigenschaft = 1) auf, wenn ein Drag-Vorgang daraus gestartet werden soll. Hier müssen dann die zu transportierenden Daten in [DragDrop.Daten] bzw. [DragDrop.Datei(x)] eingetragen sowie in [DragDrop.Aktion] festgelegt werden, ob die Daten kopiert (1), verschoben (2) oder beides (3) werden dürfen
::  Anzeige_Element(Ziel)_Dragtritt in dem Element auf, über das der Drag&Drop-Vorgang abläuft (Zielelement mit DragDropZiel-Eigenschaft = 1) . In den [DragDrop.XX]-Eigenschaften stehen die Angaben zu dem gewünschten Transport. Hier muss entschieden werden, ob und welche Aktion erlaubt ist, und dies in [DragDrop.Aktion] eingesetzt werden. In [DragDrop.ErlaubteAktion] steht die Aktion, welche von der Quelle vorgegeben wurde.
::  Anzeige_Element(Ziel)_Dropwar im _Drag-Ereignis eine Aktion erlaubt worden, was am Mauszeiger zu erkennen ist, tritt dieses Ereignis beim Loslassen der Maustaste auf.
::  Anzeige_Element(Quelle)_DragEndetritt nach dem Loslassen der Maustaste im Quellelement auf. In [DragDrop.LetzteAktion] steht dann die vom Ziel ausgeführte Aktion.

 

 

Einfaches Beispiel für Datei-Drag&Drop:

***  Drag&Drop Beispiel

     Anzeigefenster  'Drag&Drop-Demo'

     Anzeige-Element  Bezeichner: '*.BMP-Datei(en) hierhin ziehen!' (ID='bezBMPDatei', X=1, Y=1, B=-1, H=8, umrandet, Tooltip='Auf dieses Element können Dateien vom Typ  [DragDrop.DateiMaske] gezogen werden')

     Anzeige-Element  Bild:  (ID='Bild1', Y=10, B=20, H=20, zentriert, umrandet)

     

***  Standard-Drag&Drop mit Dateien einer vorgegebenen Maske

     Setze  in [DragDrop.DateiMaske]:  '*.BMP;*.JPG;*.ICO;*.GIF'

     Setze  in [.Element(bezBMPDatei).DragDropZiel]:  '1'

     Warte  endlos...

     

***  Drop der vorgegeben Datei(en)

::  Anzeige_Element(bezBMPDatei)_Drop

     Setze  in [.Element(bezBMPDatei)]:  '[DragDrop.DateiAnzahl] Dateien mit [DragDrop.DateiMaske]: ¶1: [DragDrop.Datei(1)]'

     Setze  in [.Element(Bild1).Bild]:  '[DragDrop.Datei(1)]'

Zurück

 

 

 

Beispiel als cX2Web-Code:

**cX400F73 A6FC26S1F4 2CMQkwCQkg RHJhZyZEcm 9wIEJlaXNw aWVsDQozOQ 

kwCQkgRHJh ZyZEcm9wLU RlbW8NCjM4 CTAJCSAqLk JNUC1EYXRl aShlbikgaG 

llcmhpbiB6 aWVoZW4hCU liZXpCTVBE YXRlaQlYMQ lZMQlXLTEJ SDgJTAlKCT 

9BdWYgZGll c2VzIEVsZW 1lbnQga/Zu bmVuIERhdG VpZW4gdm9t IFR5cCAgW0 

RyYWdEcm9w LkRhdGVpTW Fza2VdIGdl em9nZW4gd2 VyZGVuDQoz OAkwCQkgCU 

lCaWxkMQlZ MTAJVzIwCU gyMAlaCUIJ Sg0KMAkwCQ 0KMQkwCQkg U3RhbmRhcm 

QtRHJhZyZE cm9wIG1pdC BEYXRlaWVu IGVpbmVyIH ZvcmdlZ2Vi ZW5lbiBNYX 

NrZQ0KMjIJ MAkJICouQk 1QOyouSlBH OyouSUNPOy ouR0lGCT1E cmFnRHJvcC 

5EYXRlaU1h c2tlDQoyMg kwCQkgMQk9 LkVsZW1lbn QoYmV6Qk1Q RGF0ZWkpLk 

RyYWdEcm9w WmllbA0KMz EJMAkJRQ0K MAkwCQ0KMQ kwCQkgRHJv cCBkZXIgdm 

9yZ2VnZWJl biBEYXRlaS hlbikNCjE5 CTAJCSBBbn plaWdlX0Vs ZW1lbnQoYm 

V6Qk1QRGF0 ZWkpX0Ryb3 ANCjIyCTAJ CSBbRHJhZ0 Ryb3AuRGF0 ZWlBbnphaG 

xdIERhdGVp ZW4gbWl0IF tEcmFnRHJv cC5EYXRlaU 1hc2tlXTog tjE6IFtEcm 

FnRHJvcC5E YXRlaSgxKV 0JPS5FbGVt ZW50KGJlek JNUERhdGVp KQ0KMjIJMA 

kJIFtEcmFn RHJvcC5EYX RlaSgxKV0J PS5FbGVtZW 50KEJpbGQx KS5CaWxkDQ 

o0NQkwCQ0K =*

 

Hinweis: Das mitgelieferte Beispielskript DragDrop-Demo.cx4 demonstriert ausführlich die unterschiedlichen Verfahren für Drag&Drop von Dateien, Texten und Bildern!

 

 


cX-Webseite: http://www.clickexe.de