Grundlagen zur Drag & Drop-Funktion in AIR

Adobe AIR 1.0 und höher

Eine kurze Erklärung sowie Codebeispiele zum Drag & Drop in AIR-Anwendungen finden Sie in den folgenden Kurzanleitungen in der Adobe Developer Connection:

Die Drag & Drop-API umfasst die folgenden Klassen:

Paket

Klassen

flash.desktop

Innerhalb der Drag & Drop-API verwendete Konstanten werden in den folgenden Klassen definiert:

flash.events

NativeDragEvent

Phasen der Drag & Drop-Bewegungen

Die Drag & Drop-Bewegung setzt sich aus drei Phasen zusammen:

Initiation
Der Benutzer initiiert eine Drag & Drop-Operation, indem er von einer Komponente oder einem Element in einer Komponente aus zu Ziehen beginnt und dabei die Maustaste gedrückt hält. Die Komponente, aus der das gezogene Element stammt, wird in der Regel mit „Ziehinitiator“ bezeichnet, denn sie löst die Ereignisse nativeDragStart und nativeDragComplete aus. Eine Adobe AIR-Anwendung beginnt eine Ziehoperation, indem sie die Methode NativeDragManager.doDrag() als Reaktion auf ein mouseDown - oder mouseMove -Ereignis aufruft.

Wenn die Ziehoperation außerhalb einer AIR-Anwendung eingeleitet wurde, gibt es kein Initiatorobjekt, das nativeDragStart - oder nativeDragComplete -Ereignisse auslösen kann.

Ziehen
Während die Maustaste noch gehalten wird, verschiebt der Benutzer den Mauscursor auf eine andere Komponente, Anwendung oder den Desktop. Solange das Element gezogen wird, löst das Initiatorobjekt kontinuierlich nativeDragUpdate -Ereignisse aus. (Dieses Ereignis wird in AIR für Linux nicht ausgelöst.) Wenn der Benutzer den Mauscursor über ein mögliches Ablageziel in einer AIR-Anwendung führt, löst das Ablageziel ein nativeDragEnter -Ereignis aus. Die Ereignisprozedur kann das Ereignisobjekt untersuchen, um festzustellen, ob die gezogenen Daten in einem Format vorliegen, das vom Ziel akzeptiert wird. Ist dies der Fall, kann man dem Benutzer durch Aufruf der Methode NativeDragManager.acceptDragDrop() die Möglichkeit zum Ablegen der Daten geben.

Solange die Ziehbewegung über einem interaktiven Objekt bleibt, löst dieses kontinuierlich nativeDragOver -Ereignisse aus. Verlässt die Ziehbewegung das interaktive Objekt, löst es ein nativeDragExit -Ereignis aus.

Ablegen
Der Benutzer lässt die Maustaste über dem gewünschten Ablageziel los. Handelt es sich bei dem Ziel um eine AIR-Anwendung oder -Komponente, so löst das Zielobjekt ein nativeDragDrop -Ereignis aus. Die Ereignisprozedur kann auf die übertragenen Daten aus dem Ereignisobjekt zugreifen. Befindet sich das Ziel außerhalb von AIR, wird die Drop-Operation vom Betriebssystem oder von einer anderen Anwendung abgewickelt. In beiden Fällen löst das initiierende Objekt ein nativeDragComplete -Ereignis aus (wenn die Ziehoperation aus AIR heraus gestartet wurde).

Die NativeDragManager-Klasse steuert sowohl das Hereinziehen als auch das Herausziehen. Alle Mitglieder der NativeDragManager-Klasse sind statisch; erstellen Sie keine Instanz dieser Klasse.

Das Clipboard-Objekt

Daten, die in eine Anwendung oder Komponente hineingezogen oder aus einer Anwendung oder Komponente herausgezogen werden, befinden sich in einem Clipboard-Objekt. Ein einzelnes Clipboard-Objekt kann mehrere Repräsentationen derselben Information verfügbar machen, sodass sich die Wahrscheinlichkeit, dass eine andere Anwendung diese Daten interpretieren und weiterverarbeiten kann, erhöht wird. Ein Bild beispielsweise könnte in Form von Bilddaten, als serialisiertes Bitmap-Objekt oder als Datei eingefügt werden. Das Rendern der Daten in einem bestimmten Format kann an eine Renderfunktion weitergereicht werden, die aber erst aufgerufen wird, wenn die Daten gelesen werden.

Nachdem eine Ziehbewegung gestartet wurde, kann nur eine Ereignisprozedur für die Ereignisse nativeDragEnter , nativeDragOver oder nativeDragDrop auf das Clipboard-Objekt zugreifen. Nachdem die Ziehbewegung beendet wird, kann das Clipboard-Objekt nicht mehr gelesen oder wiederverwendet werden.

Ein Anwendungsobjekt kann als Verweis übertragen werden oder als serialisiertes Objekt. Verweise sind nur innerhalb der Ursprungsanwendung zulässig. Serialisierte Objektübertragungen zwischen AIR-Anwendungen sind zulässig, können aber nur bei Objekten verwendet werden, die gültig bleiben, wenn sie serialisiert und deserialisiert werden. Objekte, die serialisiert werden, werden in das Action Message Format für ActionScript 3 (AMF3) konvertiert, einem stringbasierten Datenübertragungsformat.

Arbeiten mit der Flex-Architektur

Beim Erstellen von Flex-Anwendungen ist es meist besser, die Adobe® Flex™-Drag & Drop-API zu verwenden. Die Flex-Architekur stellt ein entsprechendes Set an Leistungsmerkmalen zur Verfügung, wenn in AIR eine Flex-Anwendung ausgeführt wird (sie verwendet den AIR-NativeDragManager intern). Flex unterhält ein begrenzteres Set an Leistungsmerkmalen, wenn eine Anwendung oder Komponente innerhalb der restriktiveren Browserumgebung ausgeführt wird. AIR-Klassen können nicht in Komponenten oder Anwendungen verwendet werden, die außerhalb der AIR-Laufzeitumgebung verwendet werden.