Unterstützung des Hineinziehens

Adobe AIR 1.0 und höher

Damit das „Hineinziehen“ unterstützt wird, muss Ihre Anwendung (bzw. typischerweise eine visuelle Komponente der Anwendung) auf die Ereignisse nativeDragEnter oder nativeDragOver reagieren.

Die einzelnen Schritte in einer typischen Ablegoperation

Ein Ablegoperation umfasst typischerweise folgende Ereignissequenz:

  1. Der Benutzer zieht ein Clipboard-Objekt über eine Komponente.

  2. Die Komponente löst ein nativeDragEnter -Ereignis aus.

  3. Die Ereignisprozedur nativeDragEnter untersucht das Ereignisobjekt, um die verfügbaren Datenformate und die zulässigen Aktionen zu überprüfen. Ist die Komponente in der Lage, das abzulegende Objekt weiterzuverarbeiten, ruft sie die Methode NativeDragManager.acceptDragDrop() auf.

  4. Der NativeDragManager ändert den Mauscursor, um anzuzeigen, dass das Objekt abgelegt werden kann.

  5. Der Benutzer legt das Objekt über eine Komponente ab.

  6. Die empfangende Komponente löst ein nativeDragDrop -Ereignis aus.

  7. Die empfangende Komponente liest die Daten im gewünschten Format aus dem Clipboard-Objekt innerhalb des Ereignisobjekts.

  8. Hat die Ziehbewegung ihren Ursprung in einer AIR-Anwendung, löst das initiierende interaktive Objekt ein nativeDragComplete -Ereignis aus. Hat die Ziehbewegung ihren Ursprung außerhalb von AIR, wird keine Rückmeldung gesendet.

Bestätigen des Hineinziehens

Wenn ein Benutzer ein Zwischenablageelement in eine visuelle Komponente hineinzieht, löst die Komponente nativeDragEnter - und nativeDragOver -Ereignisse aus. Um zu bestimmen, ob die Komponente das Zwischenablageelement akzeptieren kann, können die Prozeduren für diese Ereignisse die Eigenschaften clipboard und allowedActions dieses Ereignisobjekts überprüfen. Um zu signalisieren, dass die Komponente das abzulegende Element akzeptieren kann, muss die Ereignisprozedur die Methode NativeDragManager.acceptDragDrop() aufrufen und einen Verweis an die empfangende Komponente übergeben. Wenn mehrere registrierte Ereignis-Listener die acceptDragDrop() -Methode aufrufen, hat die letzte Prozedur in der Liste den Vorrang. Der acceptDragDrop() -Aufruf bleibt gültig, bis der Mauscursor die Grenzen des empfangenden Objekts verlässt und dabei das nativeDragExit -Ereignis auslöst.

Wenn im allowedActions -Parameter, der an doDrag() übergeben wurde, mehrere Aktionen zugelassen sind, kann der Benutzer auswählen, welche der zulässigen Aktionen durchgeführt werden soll, indem er eine Zusatztaste drückt. Der Ziehmanager ändert das Cursorbild, um dem Benutzer mitzuteilen, welche Aktion ausgeführt wird, wenn er die Ziehoperation abschließt. Die beabsichtigte Aktion wird von der dropAction -Eigenschaft des NativeDragEvent-Objekts gemeldet. Die für eine Ziehbewegung eingestellte Aktion ist nur ein Vorschlag. Die an der Übertragung beteiligten Komponenten müssen das entsprechende Verhalten implementieren. Um beispielsweise eine Verschiebaktion abzuschließen, würde die Ursprungsanwendung (der Ziehinitiator) das gezogene Element wohl entfernen und das Ablageziel würde es hinzufügen.

Die Zielanwendung kann die Ablegaktion auf drei mögliche Aktionen begrenzen, indem sie die dropAction -Eigenschaft der NativeDragManager-Klasse setzt. Wenn ein Benutzer versucht, über die Tastatur eine andere Aktion zu wählen, zeigt der NativeDragManager den Nicht-verfügbar- Cursor an. Setzen Sie die Eigenschaft dropAction in den Prozeduren, und zwar sowohl für das Ereignis nativeDragEnter als auch für das Ereignis nativeDragOver .

Das folgende Beispiel präsentiert eine Ereignisprozedur für ein nativeDragEnter - oder nativeDragOver -Ereignis. Diese Prozedur akzeptiert eine Hineinziehbewegung, wenn die gezogene Zwischenablage Daten im Textformat enthält.

import flash.desktop.NativeDragManager; 
import flash.events.NativeDragEvent; 
 
public function onDragIn(event:NativeDragEvent):void{ 
    NativeDragManager.dropAction = NativeDragActions.MOVE; 
    if(event.clipboard.hasFormat(ClipboardFormats.TEXT_FORMAT)){ 
        NativeDragManager.acceptDragDrop(this); //'this' is the receiving component 
    } 
}

Abschließen der Ablegaktion

Wenn ein Benutzer das gezogene Element auf dem interaktiven Objekt ablegt, das die Ziehbewegung akzeptiert hat, löst das interaktive Objekt ein nativeDragDrop -Ereignis aus. Die Ereignisprozedur für dieses Ereignis kann die Daten aus der clipboard -Eigenschaft des Ereignisobjekts extrahieren.

Wenn die Zwischenablage ein von der Anwendung definiertes Format enthält, bestimmt der Parameter transferMode , der an die Methode getData() des Clipboard-Objekts übergeben wurde, ob der Ziehmanager einen Verweis oder eine serialisierte Version des Objekts ausgibt.

Das folgende Beispiel präsentiert eine Ereignisprozedur für das nativeDragDrop -Ereignis.

import flash.desktop.Clipboard; 
import flash.events.NativeDragEvent; 
 
public function onDrop(event:NativeDragEvent):void { 
    if (event.clipboard.hasFormat(ClipboardFormats.TEXT_FORMAT)) { 
    var text:String = 
        String(event.clipboard.getData(ClipboardFormats.TEXT_FORMAT,  
                                    ClipboardTransferMode.ORIGINAL_PREFERRED)); 
}

Ist die Ereignisprozedur einmal vorhanden, ist das Clipboard-Objekt nicht mehr gültig. Bei jedem Versuch, auf das Objekt oder seine Daten zuzugreifen, kommt es zu einen Fehler.

Aktualisieren der visuellen Darstellung einer Komponente

Eine Komponente kann seine visuelle Darstellung aufgrund des NativeDragEvent-Ereignisses aktualisieren. In der folgenden Tabelle ist beschrieben, welche Art von Änderung eine typische Komponente als Reaktion auf verschiedene Ereignisse vornimmt:

Ereignis

Beschreibung

nativeDragStart

Das initiierende, interaktive Objekt kann mithilfe des nativeDragStart -Ereignisses visuell anzeigen, dass es die Ziehbewegung ausgelöst hat.

nativeDragUpdate

Das initiierende, interaktive Objekt kann mithilfe des nativeDragUpdate-Ereignisses seinen Status während der Bewegung aktualisieren. (Dieses Ereignis gibt es nicht in AIR für Linux.)

nativeDragEnter

Ein potentiell empfangendes, interaktives Objekt kann mithilfe dieses Ereignisses den Fokus zu übernehmen oder visuell anzeigen, ob es das abzulegende Element akzeptieren kann oder nicht.

nativeDragOver

Ein potentiell empfangendes, interaktives Objekt kann dieses Ereignis dazu verwenden, mit einem interaktiven Objekt auf die Mausbewegung zu reagieren, etwa wenn der Mauscursor über den „sensiblen“ Bereich einer komplexen Komponente geführt wird, z. B. eine Straßenkarte.

nativeDragExit

Ein potentiell empfangendes, interaktives Objekt kann dieses Ereignis dazu verwenden, seinen vorigen Status wieder herzustellen, wenn eine Ziehbewegung die Grenzen dieses Objekts verlässt.

nativeDragComplete

Das initiierende, interaktive Objekt kann mithilfe dieses Ereignisses das verbundene Datenmodell aktualisieren, z. B. durch Entfernen eines Elements aus einer Liste oder durch Wiederherstellen seines visuellen Status.

Verfolgen der Mausposition beim Hineinziehen

Während sich eine Ziehbewegung über einer interaktiven Komponente befindet, löst diese nativeDragOver -Ereignisse aus. Diese Ereignisse werden alle paar Millisekunden sowie bei jeder Mausbewegung ausgelöst. Anhand des nativeDragOver -Ereignisobjekts lässt sich die Position des Mauscursors über der Komponente bestimmen. Dieser Zugriff auf die Mausposition kann bei komplexen, empfangenden Komponenten, die sich nicht aus Unterkomponenten zusammensetzen, sehr nützlich sein. Angenommen, in Ihrer Anwendung wird eine Bitmap mit einer Straßenkarte angezeigt, und Sie möchten bestimmte Bereiche auf der Karte hervorheben, wenn der Benutzer Informationen daraufzieht. Dafür können Sie die Mauskoordinaten nutzen, die vom nativeDragOver -Ereignis gemeldet werden, und somit die Mausposition innerhalb der Karte bestimmen.