İçeri sürükleme hareketini destekleme

Adobe AIR 1.0 ve üstü

İç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:

  1. Kullanıcı clipboard nesnesini bir bileşenin üzerine sürükler.

  2. Bileşen bir nativeDragEnter olayı gönderir.

  3. 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.

  4. NativeDragManager fare imlecini, nesnenin bırakıldığını gösterecek şekilde değiştirir.

  5. Kullanıcı nesneyi bileşenin üzerine bırakır.

  6. Alıcı bileşen bir nativeDragDrop olayı gönderir.

  7. Alıcı bileşen, istenen biçimdeki verileri olay nesnesinin içindeki Clipboard nesnesinden okur.

  8. 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.