İçeri sürükleme hareketini desteklemek için, uygulamanız (genelde uygulamanızın görsel bir bileşeni)
nativeDragEnter
veya
nativeDragOver
olaylarına yanıt vermelidir.
Genel bir bırakma işleminin adımları
Bırakma işlemi için tipik olay sırası aşağıdaki gibidir:
-
Kullanıcı clipboard nesnesini bir bileşenin üzerine sürükler.
-
Bileşen bir
nativeDragEnter
olayı gönderir.
-
nativeDragEnter
olay işleyici, kullanılabilir veri biçimlerini ve izin verilen eylemleri kontrol etmek için olay nesnesini inceler. Bileşen bırakmayı işleyebilirse,
NativeDragManager.acceptDragDrop()
öğesini çağırır.
-
NativeDragManager fare imlecini, nesnenin bırakıldığını gösterecek şekilde değiştirir.
-
Kullanıcı nesneyi bileşenin üzerine bırakır.
-
Alıcı bileşen bir
nativeDragDrop
olayı gönderir.
-
Alıcı bileşen, istenen biçimdeki verileri olay nesnesinin içindeki Clipboard nesnesinden okur.
-
Sürükleme hareketi bir AIR uygulamasının içinden kaynaklandıysa, başlatan etkileşimli nesne bir
nativeDragComplete
olayı gönderir. Hareket AIR uygulamasının dışından kaynaklandıysa, geribildirim gönderilmez.
Bir içeri sürükleme hareketini onaylama
Kullanıcı bir pano öğesini görsel bir bileşenin sınırlarının içine sürüklediğinde, bileşen
nativeDragEnter
ve
nativeDragOver
olaylarını gönderir. Bileşenin pano öğesini kabul edip edemeyeceğini belirlemek için, bu olayların işleyicileri, olay nesnesinin
clipboard
ve
allowedActions
özelliklerini kontrol edebilir. Olay işleyici, bileşenin bırakma işlemini kabul edebileceğini bildirmek için alıcı bileşene bir başvuru ileterek
NativeDragManager.acceptDragDrop()
yöntemini çağırmalıdır. Birden fazla kayıtlı olay dinleyicisi
acceptDragDrop()
yöntemini çağırırsa, listedeki son işleyici önceliğe sahiptir. Fare kabul eden nesnenin sınırlarından çıkıp
nativeDragExit
olayını tetikleyene kadar,
acceptDragDrop()
çağrısı geçerliliğini korur.
doDrag()
öğesine iletilen
allowedActions
parametresinde birden fazla eyleme izin veriliyorsa, kullanıcı bir değiştirici tuşunu basılı tutarak izin verilen eylemlerden hangilerini gerçekleştirmeyi düşündüğünü belirtebilir. Sürükleme yöneticisi, kullanıcıya, bırakma işlemini tamamlasaydı hangi eylemin gerçekleşeceğini göstermek üzere imleç görüntüsünü değiştirir. İstenen eylem, NativeDragEvent nesnesinin
dropAction
özelliği tarafından bildirilir. Sürükleme hareketi için eylem kümesi yalnızca tavsiye amaçlıdır. Aktarımda yer alan bileşenlerin uygun davranışı uygulaması gereklidir. Örneğin bir taşıma eylemini tamamlamak için, sürükleme başlatıcısı sürüklenen öğeyi sürükleyebilir ve bırakma hedefi bunu ekleyebilir.
Sürükleme hedefiniz NativeDragManager sınıfının
dropAction
özelliğini ayarlayarak, sürükleme eylemini üç olası eylemden biriyle sınırlayabilir. Kullanıcı klavyeyi kullanarak farklı bir eylem seçmeyi denerse, NativeDragManager
unavailable
imleci görüntüler. Hem
nativeDragEnter
hem de
nativeDragOver
olayları için, işleyicilerdeki
dropAction
özelliğini ayarlayın.
Aşağıdaki örnek, bir
nativeDragEnter
veya
nativeDragOver
olayı için olay işleyicisini gösterir. Sürüklenen pano metin biçiminde veriler içeriyorsa, bu işleyici yalnızca içeri sürükleme hareketini kabul eder.
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
}
}
Bırakmayı tamamlama
Kullanıcı sürüklenen öğeyi hareketi kabul eden etkileşimli bir nesnenin üzerine bıraktığında, etkileşimli nesne bir
nativeDragDrop
olayı gönderir. Bu olayın işleyicisi verileri olay nesnesinin
clipboard
özelliğinden ayıklayabilir.
Pano uygulama tanımlı bir biçim içerdiğinde, Clipboard nesnesinin
getData()
yöntemine iletilen
transferMode
parametresi sürükleme yöneticisinin bir başvuruyu mu, yoksa nesnenin serileştirilmiş bir sürümünü mü döndürdüğünü belirler.
Aşağıdaki örnek
nativeDragDrop
olayı için bir olay işleyicisini gösterir:
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));
}
Olay işleyicisinden çıkıldıktan sonra, Clipboard nesnesi geçerliliğini kaybeder. Nesneye veya verilerine erişme girişimi, hata oluşmasına neden olur.
Bir bileşenin görünümünü güncelleme
Bir bileşen görünümünü NativeDragEvent olaylarına dayalı olarak güncelleyebilir. Aşağıdaki tablo tipik bir bileşenin farklı olaylara yanıt olarak yapacağı değişiklikleri açıklar:
Olay
|
Açıklama
|
nativeDragStart
|
Başlatan etkileşimli nesne
nativeDragStart
olayını, sürükleme hareketinin bu etkileşimli nesneden kaynaklandığına dair görsel geribildirim sağlamak için kullanabilir.
|
nativeDragUpdate
|
Başlatan etkileşimli nesne, nativeDragUpdate olayını, hareket sırasında durumunu güncellemek için kullanabilir. (Bu olay Linux için AIR'de bulunmaz)
|
nativeDragEnter
|
Olası alıcı etkileşimli nesne bu olayı odağı kendine çekmek veya bırakma işlemini kabul edip edemeyeceğini görsel olarak belirtmek için kullanabilir.
|
nativeDragOver
|
Olası alıcı etkileşimli nesne bu olayı, farenin sokak haritası görüntüsü gibi karmaşık bir bileşenin "sıcak" bölgesine girmesi gibi farenin etkileşimli nesne içerisindeki hareketine yanıt vermek için kullanabilir.
|
nativeDragExit
|
Olası alıcı etkileşimli nesne bu olayı, bir sürükleme hareketi sınırlarının dışına taşındığında durumunu geri yüklemek için kullanabilir.
|
nativeDragComplete
|
Alıcı etkileşimli nesne bu olayı, listeden bir öğeyi kaldırmak gibi ilişkilendirilen veri modelini güncellemek veya görsel durumunu geri yüklemek için kullanabilir.
|
İçeri sürükleme hareketi sırasında fare konumunu izleme
Sürükleme hareketi bir bileşenin üzerinde kaldığında, bu bileşen
nativeDragOver
olaylarını gönderir. Bu olaylar her birkaç milisaniyede bir ve farenin her hareketinde gönderilir.
nativeDragOver
olay nesnesi, farenin bileşen üzerindeki konumunu belirlemek için kullanılabilir. Fare konumuna erişimi olmak, alıcı bileşenin karmaşık olduğu, ancak alt bileşenlerden oluşmadığı durumlarda yararlı olabilir. Örneğin, uygulamanız bir sokak haritası içeren bir bitmap görüntülediyse ve kullanıcı içlerine bilgi sürüklediğinde haritadaki bölgelerin vurgulanmasını istediyseniz, harita içinde fare konumunu izlemek için
nativeDragOver
olayında bildirilen fare koordinatlarını kullanabilirsiniz.
|
|
|