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:
-
De gebruiker sleept een Clipboard-object over een component.
-
De component verzendt de gebeurtenis
nativeDragEnter
.
-
De gebeurtenishandler
nativeDragEnter
controleert de beschikbare gegevensindelingen en toegestane acties van het gebeurtenisobject. Als de component het neerzetten kan verwerken, wordt
NativeDragManager.acceptDragDrop()
opgeroepen.
-
NativeDragManager wijzigt de muiscursor om aan te geven dat het object kan worden neergezet.
-
De gebruiker zet het object neer op de component.
-
De ontvangende component verzendt de gebeurtenis
nativeDragDrop
.
-
De ontvangende component leest de gegevens in de gewenste indeling uit het Clipboard-object in het gebeurtenisobject.
-
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.
|
|
|