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:
-
Användaren drar ett urklippsobjekt över en komponent.
-
Komponenten skickar en
nativeDragEnter
-händelse.
-
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()
.
-
NativeDragManager ändrar musmarkören för att ange att objektet kan släppas.
-
Användaren släpper objektet över komponenten.
-
Den mottagande komponenten skickar en
nativeDragDrop
-händelse.
-
Den mottagande komponenten läser data i önskat format från Clipboard-objektet i händelseobjektet.
-
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.
|
|
|