Cuando un usuario arrastra un elemento del portapapeles para introducirlo dentro de los límites de un componente visual, el componente distribuye eventos
nativeDragEnter
y
nativeDragOver
events. Para determinar si el componente puede aceptar el elemento del portapapeles, los controladores de estos eventos pueden comprobar las propiedades
clipboard
y
allowedActions
del objeto de evento. Para indicar que el componente puede aceptar que se le coloque el elemento, el controlador de eventos debe llamar al método
NativeDragManager.acceptDragDrop()
, pasando una referencia al componente receptor. Si hay más de un detector de eventos registrado que llama al método
acceptDragDrop()
, tiene preferencia el último controlador de la lista. La llamada al método
acceptDragDrop()
sigue siendo válida hasta que el ratón sale fuera del objeto receptor, activando el evento
nativeDragExit
.
Si se admite más de una acción en el parámetro
allowedActions
que se pasa a
doDrag()
, el usuario puede pulsar una tecla modificadora para indicar cuál de las acciones admitidas pretenden realizar. El gestor de la acción de arrastrar cambia la imagen del cursor para indicar al usuario qué acción se produce si coloca el objeto. La propiedad
dropAction
del objeto NativeDragEvent notifica la acción que se pretende realizar. La acción configurada para un gesto de arrastrar no es más que orientativa. Los componentes involucrados en la transferencia deben implementar el comportamiento que corresponda. Para finalizar una acción de mover, por ejemplo, el iniciador de la operación de arrastrar puede eliminar el elemento arrastrado y el destino puede añadirlo.
El destino de arrastre puede limitar la acción de colocar a una de tres acciones posibles mediante la definición de la propiedad
dropAction
de la clase NativeDragManager. Si un usuario intenta elegir otra acción con el teclado, NativeDragManager muestra el cursor de
indisposición
. Defina la propiedad
dropAction
de los controladores para ambos eventos,
nativeDragEnter
y
nativeDragOver
.
El ejemplo siguiente ilustra un controlador de eventos para un evento
nativeDragEnter
o
nativeDragOver
. Este controlador solo acepta un gesto de arrastrar hacia dentro si el portapapeles que se arrastra contiene datos en formato de texto.
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
}
}