FG Mit click.EXE 5.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, als auch Daten von einem Element in ein anderes zu verschieben.
Beim Ziehen über das Element (DragOver) erfolgt das Ereignis ::Anzeige_Element(<Eingabefeldname>)_Drag
Der gezogene Dateiname steht dabei in [cXDragDrop.Datei]
Sollten mehrere Dateien verschoben worden sein, findet sich deren Anzahl in [cX.DragDrop.DateiAnzahl] und die Namen der weiteren Dateien in [cX.DragDrop.Datei(2)] bis [cX.DragDrop.Datei(N)]
Beim Fallenlassen (Drop) erfolgt das Ereignis ::Anzeige_Element(<Eingabefeldname>)_Drop
Der "gedroppte" Dateiname steht dabei in [cX.DragDrop.Datei] (ggf. weitere Namen in [cX.DragDrop.Datei(2)] bis [cX.DragDrop.Datei(N)])
Folgende Platzhalter stehen als [cX.DragDrop.X] zur Verfügung:
.Aktion | Mögliche bzw. gewünschte Aktion(en) beim Drag&Drop (0=keiner, 1=Kopieren, 2=Verschieben) |
.Datei(X) | Auslesen der beim Drag&Drop verschobenen Datei X |
.Dateianzahl | Anzahl der beim Drag&Drop verschobenen Dateien |
.DateiListe | liefert eine Liste aller per Drag&Drop verschobenen Dateien |
.Dateimaske | optionale Dateimaske(n) für gültiges automatisches Drop (z.B. *.txt;*.docx): Drop ist nur möglich, wenn alle Dateien einer der Masken entsprechen |
.Daten(Format) | 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 oder die Sender-Elemententypen) |
.FormatDa(Format) | Abfrage, ob Drag&Drop-Daten des Formats X verfügbar sind |
.Formate | Liefert eine Liste der verfügbaren Formate |
.LetzteAktion | Typ des zuletzt abgeschlossenen Drag&Drop (0=keiner, 1=Kopieren, 2=Verschieben) |
.Maustaste | Beim letzten Drag&Drop-Ereignis gedrückte Maustaste(n) |
.SenderFenster | Liefert die ID des Fensters mit dem Element (etwa eine Liste oder ein Baum), aus dem die Daten kommen (falls verfügbar) |
.SenderName | Liefert die ID des Elements, aus dem die Daten kommen (falls verfügbar, etwa eine Liste oder ein Baum) |
.Start | Setzen auf "Elemente-ID;Aktion;Daten" (optional eine Bildquelle als Daten) beginnt das Dragging dieses Elements |
.Text | Per DragDrop hierhin verschobener Textinhalt (bzw. Dateninhalt) |
.UmschaltTaste | Beim letzten Drag&Drop-Ereignis gedrückte Umschalttaste(n) |
.X | X-Position im betroffenen Fenster/Element des letzten Drag&Drop-Ereignisses |
.Y | Y-Position des letzten Drag&Drop-Ereignisses |
Für die Angabe eines Datenformats (.Format(X), .Daten(X), DragDaten) stehen folgende (von Windows unterstützten) Datenformate zur Verfügung (die Zahlenwerte sind vom Zwischenablage-System von Windows vorgegeben):
ddfText | 1 Text |
ddfBitmap | 2 Bitmap |
ddfMetafile | 3 Metafile (.wmf) |
ddfRTF | 4 RichText Format (.rtf) |
ddfDateien | 5 Dateiliste |
ddfDDE | 6 DDE-Link |
ddfPalette | 7 Palette |
ddfDIB | 8 Geräteunabhängige Bitmap (DIB) |
ddfEMetafile | 14 Enhanced Metafile (.emf) |
Folgende Ereignisse werden bei einem Drag&Drop-Vorgang ausgelöst:
:: Anzeige_Element(Quelle)_DragStart | tritt 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 [cX.DragDrop.Daten] bzw. [cX.DragDrop.Datei(x)] eingetragen sowie in [cX.DragDrop.Aktion] festgelegt werden, ob die Daten kopiert (1), verschoben (2) oder beides (3) werden dürfen |
:: Anzeige_Element(Ziel)_Drag | tritt in dem Element auf, über das der Drag&Drop-Vorgang abläuft (Zielelement mit DragDropZiel-Eigenschaft = 1) . In den [cX.DragDrop.XX]-Eigenschaften stehen die Angaben zu dem gewünschten Transport. Hier muss entschieden werden, ob und welche Aktion erlaubt ist, und dies in [cX.DragDrop.Aktion] eingesetzt werden. In [cX.DragDrop.ErlaubteAktion] steht die Aktion, welche von der Quelle vorgegeben wurde. |
:: Anzeige_Element(Ziel)_Drop | war im _Drag-Ereignis eine Aktion erlaubt worden, was am Mauszeiger zu erkennen ist, tritt dieses Ereignis beim Loslassen der Maustaste auf. |
:: Anzeige_Element(Quelle)_DragEnde | tritt nach dem Loslassen der Maustaste im Quellelement auf. In [cX.DragDrop.LetzteAktion] steht dann die vom Ziel ausgeführte Aktion. |
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 [cX.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! ([cX.DragDrop.Datei])' (ID='DropZiel') Zurück
*** Die Maustaste wurde über dem Eingabefeld losgelassen :: Anzeige_Element_DropZiel_Drop Anzeige-Element Eingabe: 'Brav! ;-) ([cX.DragDrop.Datei])' (ID='DropZiel') Zurück |
Hinweis: Das mitgelieferte Beispielskript DragDrop-Test.cx5 demonstriert ausführlich die unterschiedlichen Verfahren für Drag&Drop von Dateien, Texten und Bildern. Auch in dem Skript Listenansicht-Demo.cx5 wird das Drag&Drop innerhalb einer Liste demonstriert.
cX-Webseite: http://www.clickexe.net