Stöd för indragningsgesten

Adobe AIR 1.0 och senare

Om du vill ha stöd för indragningsgesten måste programmet (eller för det mesta en visuell komponent i programmet) svara på nativeDragEnter- eller nativeDragOver-händelser.

Steg i en vanlig släppåtgärd

Följande sekvens med händelser brukar ingå i en släppåtgärd:

  1. Användaren drar ett urklippsobjekt över en komponent.

  2. Komponenten skickar en nativeDragEnter-händelse.

  3. Hanteraren för händelsen nativeDragEnter undersöker händelseobjektet för att kontrollera tillgängliga dataformat och tillåtna åtgärder. Om komponenten kan hantera släppningen anropas NativeDragManager.acceptDragDrop().

  4. NativeDragManager ändrar musmarkören för att ange att objektet kan släppas.

  5. Användaren släpper objektet över komponenten.

  6. Den mottagande komponenten skickar en nativeDragDrop-händelse.

  7. Den mottagande komponenten läser data i önskat format från Clipboard-objektet i händelseobjektet.

  8. Om dragningsgesten härstammar från ett AIR-program skickar det initierande interaktiva objektet en nativeDragComplete-händelse. Om gesten började utanför AIR skickas ingen feedback.

Bekräfta en indragningsgest

När en användare drar ett urklippsobjekt innanför gränserna för en visuell komponent skickas händelserna nativeDragEnter och nativeDragOver. Om du vill ta reda på om komponenten accepterar urklippsobjektet kan hanterarna för dessa händelser kontrollera egenskaperna clipboard och allowedActions för händelseobjektet. Om du vill signalera att komponenten kan acceptera släppningen måste händelsehanteraren anropa metoden NativeDragManager.acceptDragDrop(), och skicka en referens till den mottagande komponenten. Om mer än en registrerad händelseavlyssnare anropar metoden acceptDragDrop() har den sista hanteraren i listan högsta prioritet. acceptDragDrop()-anropet fortsätter att gälla tills musen lämnar gränserna för det accepterande objektet, och händelsen nativeDragExit utlöses.

Om mer än en åtgärd tillåts i parametern allowedActions som skickas till doDrag(), kan användaren ange vilken av de tillåtna åtgärderna han eller hon tänker utföra genom att hålla ned en modifieringstangent. Draghanteraren ändrar markörbilden för att ange för användaren vilken åtgärd som sker om han eller hon slutför släppningen. Den tänkta åtgärden rapporteras i egenskapen dropAction för NativeDragEvent-objektet. Åtgärderna för en dragningsgest är bara förslag. Komponenterna som ingår i överföringen måste implementera rätt beteende. En flyttåtgärd slutförs till exempel genom att dragningsinitieraren tar bort det dragna objektet och släppmålet lägger till det.

Dragmålet kan begränsa släppåtgärden till en av tre möjliga åtgärder genom att du ställer in egenskapen dropAction för klassen NativeDragManager. Om en användare försöker att välja en annan åtgärd med tangentbordet visar NativeDragManager markören otillgänglig. Ställ in egenskapen dropAction i hanterarna för både nativeDragEnter- och nativeDragOver-händelserna.

I följande exempel visas en händelsehanterare för en nativeDragEnter- eller nativeDragOver-händelse. Den här hanteraren accepterar bara en indragningsgest om urklippet som dras innehåller data i textformat.

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

Slutföra släppningen

När användaren släpper ett draget objekt i ett interaktivt objekt som har accepterat gesten, skickar det interaktiva objektet en nativeDragDrop-händelse. Hanteraren för den här händelsen kan extrahera data från egenskapen clipboard för händelseobjektet.

När urklippet innehåller ett programdefinierat format, bestämmer parametern transferMode som skickas till metoden getData() för Clipboard-objektet om draghanteraren returnerar en referens eller en serialiserad version av objektet.

I följande exempel visas en händelsehanterare för händelsen 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)); 
}

När händelsehanteraren avslutas gäller inte längre Clipboard-objektet. Alla försök att få åtkomst till objektet eller dess data genererar ett fel.

Uppdatera en komponents visuella utseende

En komponent kan uppdatera sitt visuella utseende baserat på NativeDragEvent-händelserna. I tabellen nedan beskrivs vilka typer av ändringar som en vanlig komponent kan göra som svar på olika händelser:

Händelse

Beskrivning

nativeDragStart

Det initierande interaktiva objektet kan använda händelsen nativeDragStart för att ge visuell feedback till dragningsgesten som härstammar från det interaktiva objektet.

nativeDragUpdate

Det initierande interaktiva objektet kan använda händelsen nativeDragUpdate för att uppdatera sin status under gesten. (Den här händelsen finns inte i AIR för Linux.)

nativeDragEnter

Ett eventuellt mottagande objekt kan använda den här händelsen för att blir markerat, eller ange visuellt att det kan eller inte kan acceptera släppningen.

nativeDragOver

Ett eventuellt mottagande interaktivt objekt kan använda den här händelsen för att svara på musens rörelser inuti det interaktiva objektet, till exempel när musen kommer till ett ”aktivt” område i en komplex komponent som en stadskarta.

nativeDragExit

Ett eventuellt mottagande objekt kan använda den här händelsen för att återställa sitt läge när en dragningsgest flyttar utanför dess gränser.

nativeDragComplete

Det initierande interaktiva objektet kan använda den här händelsen för att uppdatera den tillhörande datamodellen, till exempel genom att ta bort ett objekt från en lista, och återställa sitt visuella läge.

Spåra musens placering under en indragningsgest

När en dragningsgest stannar kvar över en komponent skickas nativeDragOver-händelser. Dessa händelser skickas med ett par millisekunders mellanrum och även när musen flyttas. nativeDragOver-händelseobjektet kan användas för att ta reda på musens placering över komponenten. Att ha tillgång till muspositionen kan vara praktiskt när den mottagande komponenten är komplex, men inte utgörs av underkomponenter. Om programmet till exempel visar en bitmapp som innehåller en stadskarta, och du vill markera områden på kartan när användaren drar information till dem, kan du använda musens koordinater som rapporteras i händelsen nativeDragOver för att spåra musens placering på kartan.