Ondersteuning voor de insleepbeweging

Adobe AIR 1.0 of hoger

Voor ondersteuning van de insleepbeweging moet uw toepassing (gewoonlijk een visuele component van uw toepassing) reageren op de gebeurtenis nativeDragEnter of nativeDragOver .

Stappen waaruit een neerzetbewerking gewoonlijk bestaat

Een neerzetbewerking bestaat gewoonlijk uit de volgende reeks gebeurtenissen:

  1. De gebruiker sleept een Clipboard-object over een component.

  2. De component verzendt de gebeurtenis nativeDragEnter .

  3. De gebeurtenishandler nativeDragEnter controleert de beschikbare gegevensindelingen en toegestane acties van het gebeurtenisobject. Als de component het neerzetten kan verwerken, wordt NativeDragManager.acceptDragDrop() opgeroepen.

  4. NativeDragManager wijzigt de muiscursor om aan te geven dat het object kan worden neergezet.

  5. De gebruiker zet het object neer op de component.

  6. De ontvangende component verzendt de gebeurtenis nativeDragDrop .

  7. De ontvangende component leest de gegevens in de gewenste indeling uit het Clipboard-object in het gebeurtenisobject.

  8. Als de sleepbeweging is gestart in een AIR-toepassing, verzendt het initiërende interactieve object de gebeurtenis nativeDragComplete . Als de beweging buiten AIR is gestart, wordt geen feedback verzonden.

Insleepbewegingen bevestigen

Wanneer een gebruiker een klemborditem binnen de grenzen van een visuele component sleept, verzendt de component de gebeurtenissen nativeDragEnter en nativeDragOver . Om te bepalen of de component het klemborditem kan accepteren, kunnen de handlers voor deze gebeurtenissen de eigenschappen clipboard en allowedActions van het gebeurtenisobject controleren. De gebeurtenishandler moet de methode NativeDragManager.acceptDragDrop() met een verwijzing naar de ontvangende component oproepen om aan te geven dat de component het neerzetten kan accepteren. Als meerdere geregistreerde gebeurtenislisteners de methode acceptDragDrop() oproepen, heeft de laatste handler in de lijst de hoogste prioriteit. De oproep acceptDragDrop() blijft geldig tot de muis buiten de grenzen van het accepterende object komt, waardoor de gebeurtenis nativeDragExit wordt geactiveerd.

Als er meerdere acties zijn toegestaan in de parameter allowedActions die aan doDrag() is doorgegeven, kan de gebruiker een aanpassingstoets ingedrukt houden om aan te geven welke actie moet worden uitgevoerd. De sleepbeheerder wijzigt de cursorafbeelding om de gebruiker te laten weten welke actie wordt uitgevoerd als het neerzetten wordt voltooid. De bedoelde actie wordt gerapporteerd aan de eigenschap dropAction van het NativeDragEvent-object. De ingestelde actie voor een sleepbeweging is slechts een voorstel. De componenten die bij de overdracht zijn betrokken, moeten het juiste gedrag implementeren. Het gesleepte item moet bijvoorbeeld door de sleepinitiator worden verwijderd en door het neerzetdoel worden toegevoegd om een verplaatsingsactie te voltooien.

De neerzetactie kan door het sleepdoel tot een van de drie mogelijke acties worden beperkt door de eigenschap dropAction van de klasse NativeDragManager in te stellen. Als een gebruiker een andere actie wil kiezen met het toetsenbord, wordt de cursor voor een niet-beschikbare actie weergegeven. Stel de eigenschap dropAction in de handlers voor de gebeurtenissen nativeDragEnter en nativeDragOver in.

In het volgende voorbeeld ziet u een gebeurtenishandler voor de gebeurtenis nativeDragEnter of nativeDragOver . Deze handler accepteert alleen een insleepbeweging als het klembord dat wordt gesleept tekst bevat.

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 
    } 
}

Het neerzetten voltooien

Wanneer de gebruiker een gesleept item neerzet op een interactief object dat de beweging heeft geaccepteerd, verzendt het interactieve object de gebeurtenis nativeDragDrop . De handler voor deze gebeurtenis kan de gegevens ophalen uit de eigenschap clipboard van het gebeurtenisobject.

Wanneer het klembord een toepassingsspecifieke indeling bevat, bepaalt de parameter transferMode die aan de methode getData() van het Clipboard-object is doorgegeven, of de sleepbeheerder een verwijzing of een geserialiseerde versie van het object retourneert.

In het volgende voorbeeld ziet u een gebeurtenishandler voor de gebeurtenis nativeDragDrop :

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)); 
}

Wanneer de gebeurtenishandler is afgesloten, is het Clipboard-object niet meer geldig. Bij elke poging om toegang tot het object of de gegevens te krijgen, wordt een fout gegenereerd.

De visuele weergave van een component bijwerken

De visuele weergave van een component kan worden bijgewerkt op basis van de NativeDragEvent-gebeurtenissen. In de volgende tabel wordt beschreven welke typen wijzigingen een component gewoonlijk aanbrengt als reactie op de verschillende gebeurtenissen:

Gebeurtenis

Beschrijving

nativeDragStart

Het initiërende interactieve object kan met de gebeurtenis nativeDragStart visueel aangeven dat de sleepbeweging afkomstig is van dat interactieve object.

nativeDragUpdate

Het initiërende interactieve object kan de gebeurtenis nativeDragUpdate gebruiken om de status bij te werken tijdens de beweging. (Deze gebeurtenis bestaat niet in AIR voor Linux.)

nativeDragEnter

Een mogelijk ontvangend interactief object kan deze gebeurtenis gebruiken om de focus te nemen of visueel aangeven dat het neerzetten wel of niet wordt geaccepteerd.

nativeDragOver

Een mogelijk ontvangend interactief object kan deze gebeurtenis gebruiken om te reageren op de beweging van de muis binnen het interactieve object, bijvoorbeeld wanneer de muis een dynamische regio van een complexe component, zoals een stratenplan, bereikt.

nativeDragExit

Een mogelijk ontvangend interactief object kan deze gebeurtenis gebruiken om de status te herstellen wanneer een sleepbeweging buiten de grenzen komt.

nativeDragComplete

Het initiërende interactieve object kan deze gebeurtenis gebruiken om het bijbehorende gegevensmodel bij te werken, zoals het verwijderen van een item uit een lijst, en om de visuele status te herstellen.

Muisposities bijhouden tijdens een sleepbeweging

Terwijl de muis over een component wordt gesleept, verzendt die component nativeDragOver -gebeurtenissen. Deze gebeurtenissen worden elke paar milliseconden verzonden en ook wanneer de muis beweegt. Het gebeurtenisobject nativeDragOver kan worden gebruikt om de positie van de muis in de component te bepalen. Toegang tot de muispositie kan nuttig zijn in situaties waarin de ontvangende component complex is maar niet uit subcomponenten bestaat. Als uw toepassing bijvoorbeeld een bitmap met een stratenplan weergeeft en u zones op de kaart wilt markeren wanneer de gebruiker daar gegevens heen sleept, kunt u met de muiscoördinaten in de gebeurtenis nativeDragOver de muispositie op de kaart bijhouden.