Adobe Air (wiwobooks.com Release)
Clipboard -Instanz schreibt und der Drag-Operation »mit auf den Weg« gibt:
import flash.desktop.NativeDragManager;
import mx.controls.Alert;
private function imageDragStart():void {
var myData:Clipboard = new Clipboard();
var myBitmapData:BitmapData = Bitmap(myImage.content).
bitmapData;
myData.setData(ClipboardFormats.BITMAP_FORMAT,
myBitmapData);
myData.setData(ClipboardFormats.TEXT_FORMAT,
lblCaption.text);
myData.setData(ClipboardFormats.FILE_LIST_FORMAT, [File.
applicationDirectory.resolvePath("images/
galileocomputing.gif")]);
NativeDragManager.doDrag(myImage, myData, myBitmapData,
new Point(-myImage.mouseX, -myImage.mouseY)); }
]]>
text="Galileo Computing"/>
Listing 15.3 Beispiel: Drag-Aktion aus AIR heraus
Um dem Benutzer ein visuelles Feedback anzubieten, werden die Bitmap-Daten des Bildes in diesem Beispiel im Aufruf der startDrag() -Methode auch als DragBild angegeben und so verschoben, dass es zu Beginn der Drag-Operation mit dem Originalbild deckungsgleich ist. Wenn Sie nun das Bild aus der Anwendung in ein Bildbearbeitungsprogramm (z. B. Fireworks) ziehen, wird dieses die Bitmap-Dateien aus dem Clipboard -Objekt auslesen und als neues Bitmap-Element öffnen oder in die bereits geöffnete Grafik einbetten. Abbildung 15.1 zeigt das Ergebnis einer solchen Operation.
Abbildung 15.1 Drag & Drop von AIR nach Fireworks
Wenn Sie hingegen das Bildobjekt auf den Schreibtisch Ihres Computers ziehen, wird das Betriebssystem die Dateireferenz verwenden und die Bilddatei kopieren, wie in Abbildung 15.2 zu sehen ist.
Abbildung 15.2 Drag & Drop von AIR zum Schreibtisch
15.2.6 Drop-Aktion in eine AIR-Anwendung hinein
Wenn Dateien oder Daten in Ihre AIR-Anwendung hineingezogen werden sollen, sieht der Ablauf etwas anders aus. Während Sie bei Drag-Operationen aus der Anwendung heraus genau wissen, was für Daten Sie auf den Weg bringen, müssen Sie im umgekehrten Fall erst herausfinden, ob die Daten des Drag & Drop-Objekts für Ihre Anwendung überhaupt interessant sind. In AIR steht zu diesem Zweck das Ereignis NativeDragEvent.DRAG_ENTER zur Verfügung, das ausgelöst wird, wenn ein Drag & Drop-Vorgang von außerhalb der Anwendung in diese hinein durchgeführt wird.
Die Drop-Aktion wird innerhalb der AIR-Anwendung nur akzeptiert, wenn Sie dies explizit zulassen, indem Sie das interaktive Objekt der statischen Methode acceptDragDrop() der Klasse NativeDragManager übergeben. Während des Drag & Drop-Vorgangs dient der Mauszeiger als Indikator für den Status der Aktion. Wenn der Mauszeiger ein Verbotsschild neben dem Mauspfeil anzeigt, ist das »Fallenlassen« des Objekts an dieser Stelle nicht möglich. Wenn ein Pluszeichen daneben dargestellt wird, kann das Objekt an diese Stelle kopiert werden. Auch das Erstellen einer Verknüpfung wird mithilfe des Mauszeigers angezeigt.
Lösungsweg
1. Registrieren eines Ereignis-Listeners für NativeDragEvent.DRAG_ENTER für die komplette Anwendung oder ein einzelnes interaktives Objekt
2. Quelltext zur Überprüfung auf Vorhandensein des richtigen Formats (Konstanten der Klasse ClipboardFormats) im NativeDragEvent.DRAG_ENTER -Ereignis-Listener
3. Falls richtiges Format vorhanden: Übergabe des interaktiven Objekts, das das Drag & Drop-Objekt empfangen soll, an die Klassenmethode acceptDragDrop() der NativeDragManager -Klasse.
4. Registrieren eines Ereignis-Listeners für NativeDragEvent.DRAG_DROP für das interaktive Objekt, das als Ziel dienen soll.
5. Quelltext zur Verarbeitung der Daten, die aus der clipboard -Eigenschaft des NativeDragEvent.DRAG_DROP -Ereignisobjekts ausgelesen werden.
So geht es
Im folgenden Flex-Kurzbeispiel wird eine Drop-Funktionalität so eingerichtet, dass die Anwendung auf das Ereignis NativeDragEvent.DRAG_ENTER reagiert und nur das Format ClipboardFormats.BITMAP_FORMAT akzeptiert:
private function handleNativeDragEnter(e:NativeDragEvent): void
Weitere Kostenlose Bücher