Quando um usuário arrasta um item da área de transferência para dentro dos limites de um componente visual, o componente despacha eventos
nativeDragEnter
e
nativeDragOver
. Para determinar se o componente pode aceitar o item da área de transferência, os manipuladores para esses eventos pode verificar as propriedades
clipboard
e
allowedActions
do objeto de evento. Para sinalizar que o componente pode aceitar a ação de soltar, o manipulador de eventos deve chamar o método
NativeDragManager.acceptDragDrop()
, transmitindo uma referência ao componente receptor. Se mais de um ouvinte de evento registrado chamar o método
acceptDragDrop()
, o último manipulador da lista tem precedência. A chamada
acceptDragDrop()
permanece válida até que o mouse deixe os limites do objeto recebedor, disparando o evento
nativeDragExit
.
Se mais de uma ação for permitida no parâmetro
allowedActions
transmitido a
doDrag()
, o usuário pode indicar qual das ações permitidas pretende mantendo pressionada uma tecla de modificador. O gerente de arrastar altera a imagem do cursor para dizer ao usuário que ação ocorreria se ele concluísse a ação de soltar. A ação pretendida é reportado pela propriedade
dropAction
do evento NativeDragEvent. O conjunto de ação para um gesto de arrastar é apenas consultivo. Os componentes envolvidos na transferência devem implementar o comportamento apropriado. Para completar uma ação de mover, por exemplo, o iniciador de arrastar poderia remover o item arrastado e o destino de soltar poderia adicioná-lo.
Seu destino de arrastar pode limitar a ação de soltar para uma das três ações possíveis definindo a propriedade
dropAction
da classe NativeDragManager. Se um usuário tenta escolher uma ação diferente usando o teclado, NativeDragManager exibe o cursor
unavailable
. Define a propriedade
dropAction
nos manipuladores para os eventos
nativeDragEnter
e
nativeDragOver
.
O exemplo a seguir ilustra um manipulador de eventos para um evento
nativeDragEnter
ou
nativeDragOver
. Esse manipulador aceita apenas um gesto de arrastar para dentro se a área de transferência sendo arrastada contiver dados em 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
}
}