Pano veri biçimleri

Flash Player 10 ve üstü, Adobe AIR 1.0 ve üstü

Pano biçimleri bir Clipboard nesnesinde bulunan verileri açıklar. Flash Player veya AIR uygulaması, ActionScript veri türleri ile sistem panosu biçimleri arasında standart veri biçimlerini otomatik olarak çevirir. Ayrıca, uygulama tanımlı biçimler kullanılarak ActionScript tabanlı uygulamalar içinde ve arasında uygulama nesneleri aktarılabilir.

Bir Clipboard nesnesi aynı bilginin farklı biçimlerdeki temsillerini içerebilir. Örneğin, bir Sprite öğesini temsil eden bir Clipboard nesnesi, aynı uygulama için kullanılacak bir başvuru biçimi, Flash Player veya AIR uygulamasında çalışan başka bir uygulama tarafından kullanılacak serileştirilmiş bir biçim, bir görüntü düzenleyicisi tarafından kullanılacak bitmap biçimi ve Sprite öğesinin bir temsilinin kopyalanıp dosya sistemine sürüklenmesi için belki de PNG dosyasını kodlamak üzere ertelenmiş oluşturmayla bir dosya listesi biçimi içerebilir.

Standart veri biçimleri

Standart biçim adlarını tanımlayan sabitler ClipboardFormats sınıfında sağlanır:

Sabit

Açıklama

TEXT_FORMAT

Metin biçimi verileri, ActionScript String sınıfına çevrilir ve bu sınıftan geri çevrilir.

HTML_FORMAT

HTML işaretlemeli metin.

RICH_TEXT_FORMAT

Zengin metin biçimi verileri, ActionScript ByteArray sınıfına çevrilir ve bu sınıftan geri çevrilir. RTF işaretlemesi, herhangi bir şekilde yorumlanmaz veya çevrilmez.

BITMAP_FORMAT

(yalnızca AIR) Bitmap-biçimi verileri, ActionScript BitmapData sınıfına veya bu sınıftan çevrilir.

FILE_LIST_FORMAT

(yalnızca AIR) Dosya biçimi verileri, ActionScript File nesnelerinden oluşan bir diziye veya bu diziden çevrilir.

URL_FORMAT

(yalnızca AIR) URL-biçimi verileri, ActionScript String sınıfına veya bu sınıftan çevrilir.

Bir AIR uygulamasında HTML içeriğindeki bir copy, cut veya paste olayına yanıt olarak veri kopyalayıp yapıştırırken, ClipboardFormat dizeleri yerine MIME türleri kullanılmalıdır. Geçerli veri MIME türleri şunlardır:

MIME türü

Açıklama

Metin

"text/plain"

URL

"text/uri-list"

Nokta Esaslı

"image/x-vnd.adobe.air.bitmap"

Dosya listesi

"application/x-vnd.adobe.air.file-list"

Not: Zengin metin biçimli veriler, HTML içeriğindeki paste olayının sonucu olarak gönderilen olay nesnesinin clipboardData özelliğinden kullanılamaz.

Özel veri biçimleri

Nesneleri başvurular veya serileştirilmiş kopyalar olarak aktarmak için, uygulama tanımlı özel biçimler kullanabilirsiniz. Başvurular yalnızca aynı uygulama dahilinde geçerlidir. Serileştirilmiş nesneler uygulamalar arasında aktarılabilir, ancak yalnızca serileştirildiğinde ve serileştirmesi kaldırıldığında geçerliliği devam eden nesnelerle kullanılabilir. Özellikleri basit türler veya serileştirilebilir nesneler olduğunda nesneler genellikle serileştirilebilir.

Serileştirilmiş bir nesneyi Clipboard nesnesine eklemek için, serializable parametresini Clipboard.setData() yöntemini çağırırken true değerine ayarlayın. Biçim adı standart biçimlerden biri veya uygulamanız tarafından tanımlanan rastgele bir dize olabilir.

Aktarım modları

Bir nesne, özel veri biçimi kullanılarak panoya yazıldığında, nesne verisi, bir başvuru olarak veya orijinal nesnenin serileştirilmiş bir kopyası olarak okunabilir. Nesnelerin başvuru olarak mı serileştirilmiş kopyalar olarak mı aktarılacağını belirleyen dört aktarım modu vardır.

Aktarım modu

Açıklama

ClipboardTransferModes.ORIGINAL_ONLY

Yalnızca bir başvuru döndürülür. Bir başvuru varsa, boş bir değer döndürülür.

ClipboardTransferModes.ORIGINAL_PREFFERED

Varsa bir başvuru döndürülür. Aksi takdirde serileştirilmiş bir kopya döndürülür.

ClipboardTransferModes.CLONE_ONLY

Yalnızca serileştirilmiş bir kopya döndürülür. Serileştirilmiş kopya yoksa, boş bir değer döndürülür.

ClipboardTransferModes.CLONE_PREFFERED

Varsa serileştirilmiş bir kopya döndürülür. Aksi takdirde bir başvuru döndürülür.

Özel veri biçimlerini okuma ve yazma

Bir nesneyi panoya yazarken, format parametresi için air: veya flash:ayrılmış önekleriyle başlamayan herhangi bir dize kullanabilirsiniz. Nesneyi okumak için biçim olarak aynı dizeyi kullanın. Aşağıdaki örnek nesnelerin panoya nasıl okunacağını ve yazılacağını gösterir:

public function createClipboardObject(object:Object):Clipboard{ 
    var transfer:Clipboard = Clipboard.generalClipboard; 
    transfer.setData("object", object, true); 
} 

Pano nesnesinden serileştirilmiş bir nesneyi ayıklamak için (bırakma veya yapıştırma işleminden sonra), aynı biçim adını ve CLONE_ONLY veya CLONE_PREFFERED aktarım modlarını kullanın.

var transfer:Object = clipboard.getData("object", ClipboardTransferMode.CLONE_ONLY); 

Başvuru her zaman Clipboard nesnesine eklenir. Pano nesnesinden başvuruyu ayıklamak için (bırakma veya yapıştırma işleminden sonra), serileştirilmiş kopya yerine ORIGINAL_ONLY veya ORIGINAL_PREFFERED aktarım modlarını kullanın:

var transferredObject:Object =  
    clipboard.getData("object", ClipboardTransferMode.ORIGINAL_ONLY); 

Başvurular yalnızca Clipboard nesnesi geçerli uygulaması kaynaklıysa geçerlidir. Başvuru varsa başvuruya erişmek için ORIGINAL_PREFFERED aktarım modunu, başvuru yoksa serileştirilmiş klonu kullanın.

Gecikmeli oluşturma

Bir veri biçimini oluşturma hesaplama yönünden pahalıysa, istenilen verileri sağlayan bir işlev sağlayarak gecikmeli oluşturmayı kullanabilirsiniz. Yalnızca bırakma veya yapıştırma işlemi, ertelenmiş biçimde veri istediğinde bu işlev çağrılır.

Oluşturma işlevi bir Clipboard nesnesine setDataHandler() yöntemi kullanılarak eklenir. İşlevin verileri uygun biçimde döndürmesi gerekir. Örneğin, setDataHandler(ClipboardFormat.TEXT_FORMAT, writeText) öğesini çağırdıysanız, writeText() işlevi bir dize döndürmelidir.

Aynı türdeki veri biçimi bir Clipboard nesnesine setData() yöntemiyle eklenirse, bu veriler gecikmeli sürüme göre önceliğe sahip olacaktır (oluşturma işlevi hiçbir zaman çağrılmaz). Aynı clipboard verilerine ikinci kez erişilirse, oluşturma işlevi çağırılabilir veya çağrılmayabilir.

Not: Mac OS X işletim sisteminde, ertelenmiş oluşturma yalnızca özel veri biçimleriyle çalışır. Standart veri biçimleriyle, oluşturma işlemi hemen çağrılır.

Gecikmeli oluşturma işlevi kullanarak metin yapıştırma

Aşağıdaki örnek gecikmeli oluşturma işlevinin nasıl uygulanacağını gösterir.

Kullanıcı Kopyala düğmesine bastığında, uygulama önceki pano işlemlerinden veri kalmamasını sağlamak için sistem panosunu temizler. Daha sonra setDataHandler() yöntemi, pano oluşturucusu olarak renderData() işlevini ayarlar.

Kullanıcı, hedef metin alanının bağlam menüsünden Yapıştır komutunu seçtiğinde, uygulama panoya erişir ve hedef metni ayarlar. Panodaki metin verisi biçimi, dize yerine bir işlevle ayarlanmış olduğundan, pano renderData() işlevini çağırır. renderData() işlevi metni kaynak metinde döndürür, ardından bu metin hedef metne atanır.

Kaynak metni Yapıştır düğmesine basmadan önce düzenlerseniz, düzenleme kopyala düğmesine basıldıktan sonra gerçekleşmiş bile olsa, düzenlemenin yapıştırılan metne yansıtılacağını göz önünde bulundurun. Bunun nedeni, yapıştır düğmesine basılana kadar oluşturma işlevinin kaynak metni kopyalamamasıdır. (Gecikmeli oluşturmayı gerçek bir uygulamada kullanırken, bu sorunun önüne geçmek için kaynak verileri bir şekilde saklamak veya korumak isteyebilirsiniz.)

Flash örneği

 package {  
    import flash.desktop.Clipboard; 
    import flash.desktop.ClipboardFormats; 
    import flash.desktop.ClipboardTransferMode; 
    import flash.display.Sprite; 
    import flash.text.TextField; 
    import flash.text.TextFormat; 
    import flash.text.TextFieldType; 
    import flash.events.MouseEvent; 
    import flash.events.Event; 
    public class DeferredRenderingExample extends Sprite  
    {  
         private var sourceTextField:TextField; 
        private var destination:TextField; 
        private var copyText:TextField; 
        public function DeferredRenderingExample():void 
        { 
            sourceTextField = createTextField(10, 10, 380, 90); 
            sourceTextField.text = "Neque porro quisquam est qui dolorem " 
                + "ipsum quia dolor sit amet, consectetur, adipisci velit."; 
                 
            copyText = createTextField(10, 110, 35, 20); 
            copyText.htmlText = "<a href='#'>Copy</a>"; 
            copyText.addEventListener(MouseEvent.CLICK, onCopy); 
 
            destination = createTextField(10, 145, 380, 90); 
            destination.addEventListener(Event.PASTE, onPaste); 
        } 
        private function createTextField(x:Number, y:Number, width:Number, 
                        height:Number):TextField 
        { 
            var newTxt:TextField = new TextField(); 
            newTxt.x = x; 
            newTxt.y = y; 
            newTxt.height = height; 
            newTxt.width = width; 
            newTxt.border = true; 
            newTxt.multiline = true; 
            newTxt.wordWrap = true; 
            newTxt.type = TextFieldType.INPUT; 
            addChild(newTxt); 
            return newTxt; 
        } 
        public function onCopy(event:MouseEvent):void 
        { 
            Clipboard.generalClipboard.clear(); 
            Clipboard.generalClipboard.setDataHandler(ClipboardFormats.TEXT_FORMAT, 
                            renderData); 
        } 
        public function onPaste(event:Event):void 
        { 
            sourceTextField.text = 
            Clipboard.generalClipboard.getData(ClipboardFormats.TEXT_FORMAT).toString; 
        } 
        public function renderData():String 
        { 
            trace("Rendering data"); 
            var sourceStr:String = sourceTextField.text; 
            if (sourceTextField.selectionEndIndex > 
                     sourceTextField.selectionBeginIndex) 
            { 
                return sourceStr.substring(sourceTextField.selectionBeginIndex, 
                                    sourceTextField.selectionEndIndex); 
            } 
            else 
            { 
                return sourceStr; 
            } 
        } 
    } 
}

Flex örneği

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="326" height="330" applicationComplete="init()"> 
    <mx:Script> 
    <![CDATA[ 
    import flash.desktop.Clipboard; 
    import flash.desktop.ClipboardFormats; 
     
    public function init():void 
    { 
        destination.addEventListener("paste", doPaste); 
    } 
 
    public function doCopy():void 
    { 
        Clipboard.generalClipboard.clear(); 
        Clipboard.generalClipboard.setDataHandler(ClipboardFormats.TEXT_FORMAT, renderData); 
    } 
    public function doPaste(event:Event):void 
    { 
        destination.text = Clipboard.generalClipboard.getData(ClipboardFormats.TEXT_FORMAT).toString; 
    } 
     
    public function renderData():String{ 
        trace("Rendering data"); 
        return source.text; 
    } 
    ]]> 
    </mx:Script> 
    <mx:Label x="10" y="10" text="Source"/> 
    <mx:TextArea id="source" x="10" y="36" width="300" height="100"> 
        <mx:text>Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit.</mx:text> 
    </mx:TextArea> 
    <mx:Label x="10" y="181" text="Destination"/> 
    <mx:TextArea id="destination"  x="12" y="207" width="300" height="100"/> 
    <mx:Button click="doCopy();" x="91" y="156" label="Copy"/> 
</mx:Application>