Temel menü işlemleri

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

Bir AIR uygulamasında yerel menüler oluşturmayla ilgili hızlı bir açıklama ve kod örnekleri için Adobe Geliştirici Bağlantısında bulunan aşağıdaki hızlı başlangıç makalelerini inceleyin:

Yerel menü sınıfları, uygulamanızın çalıştığı işletim sisteminin yerel menü özelliklerine erişmenizi sağlar. NativeMenu nesneleri uygulama menüleri (Mac OS X'te bulunan), pencere menüleri (Windows ve Linux'ta bulunan), bağlam menüleri ve açılır menüler için kullanılabilir.

AIR'nin dışında, Flash Player'ın bir kullanıcı uygulamanızdaki bir nesneye sağ tıklattığında veya command düğmesine basarak tıklattığında otomatik olarak görüntülediği bağlam menüsünü kullanabilirsiniz. (Bir otomatik bağlam menüsü AIR uygulamaları için görüntülenmez.)

Menü sınıfları

Menü sınıfları şunları içerir:

Paket

Sınıflar

flash.display

flash.ui

flash.events

Menü çeşitleri

AIR, aşağıdaki menü türlerini destekler:

Bağlam menüleri
Bağlam menüleri, SWF içeriğindeki etkileşimli bir nesnenin veya HTML içeriğindeki bir belge öğesinin sağ tıklatılması veya command tuşuna basılı tutularak tıklatılması yoluyla açılır.

Flash Player çalışma zamanında, bir bağlam menüsü otomatik olarak görüntülenir. ContextMenu ve ContextMenuItem sınıflarını menüye kendi komutlarınızı eklemek için kullanabilirsiniz. Ayrıca yerleşik komutların bazılarını, ancak hepsini değil kaldırabilirsiniz.

AIR çalışma zamanında, NativeMenu veya ContextMenu sınıflarından birini kullanarak bir bağlam menüsü oluşturabilirsiniz. AIR'de HTML içeriğinde, HTML öğelerine bağlam menüleri eklemek için Webkit HTML ve JavaScript API'lerini kullanabilirsiniz.

Uygulama menüleri (Yalnızca AIR)
Uygulama menüsü, tüm uygulamada geçerli olan genel bir menüdür. Uygulama menüleri Mac OS X'te desteklenir, ancak Windows veya Linux'ta desteklenmez. Mac OS X'te, işletim sistemi otomatik olarak bir uygulama menüsü oluşturur. Standart menülere öğeler ve alt menüler eklemek için AIR menü API'lerini kullanabilirsiniz. Varolan menü komutlarını yönetmek için dinleyiciler ekleyebilirsiniz. Veya varolan öğeleri kaldırabilirsiniz.

Pencere menüleri (Yalnızca AIR)
Pencere menüsü tek bir pencereyle ilişkilendirilmiştir ve başlık menüsünün altında görüntülenir. Menüler, bir NativeMenu nesnesi oluşturma ve bu nesneyi NativeWindow nesnesinin menu özelliğine atama yoluyla bir pencereye eklenebilir. Pencere menüleri Windows ve Linux işletim sistemlerinde desteklenir, ancak Mac OS X'te desteklenmez. Yerel pencere menüleri yalnızca sistem kromu olan pencerelerle kullanılabilir.

Dock ve sistem tepsisi simgesi menüleri (Yalnızca AIR)
Bu simge menüleri bağlam menülerine benzer ve Mac OS X'te yer alan bir uygulama simgesine veya görev çubuğundaki Windows ve Linux bildirim alanlarına atanır. Dock ve sistem tepsisi simge menüleri, NativeMenu sınıfını kullanır. Mac OS X'te, menüdeki öğeler standart işletim sistemi öğelerinin üzerine eklenmiştir. Windows ve Linux'ta standart menü bulunmaz.

Açılır menüler (Yalnızca AIR)
AIR açılır menüsü, bağlam menüsüne benzer, ancak belirli bir uygulama nesnesi veya bileşeni ile ilişkilendirilmiş olmayabilir. Açılır menüler, herhangi bir NativeMenu nesnesinin display() yönteminin çağrılması yoluyla pencerenin herhangi bir yerinde görüntülenebilir.

Özel menüler
Yerel menüler tamamen işletim sistemiyle çizilir ve bu nedenle Flash ve HTML oluşturma modellerinin dışında yer alır. Yerel menüler kullanmak yerine, her zaman kendi özel, yerel olmayan menülerinizi MXML, ActionScript veya JavaScript (AIR'de) kullanarak oluşturabilirsiniz. Bu tip menüler uygulama içeriğinin içinde tamamen oluşturulmuş olmalıdır.

Flex menüleri
Adobe® Flex™ çerçevesi, bir dizi Flex menü bileşeni sağlar. Flex menüleri işletim sistemiyle değil, çalışma zamanı ile çizilir ve yerel menüler değillerdir. Flex menü bileşeni, sistem kromu içermeyen Flex pencereleri için kullanılabilir. Flex menü bileşenini kullanmanın bir diğer faydası da, menüleri MXML biçiminde tanıtıcı biçimde belirtebiliyor olmanızdır. Flex Çerçevesi kullanıyorsanız, pencere menüleri için yerel sınıflar yerine Flex menü sınıflarını kullanın.

Varsayılan menüler (Yalnızca AIR)

Aşağıdaki varsayılan menüler işletim sistemi veya yerleşik bir AIR sınıfı tarafından sağlanır:

  • Mac OS X'teki uygulama menüsü

  • Mac OS X'teki dock simgesi menüsü

  • HTML içeriğinde seçilen metin ve görüntüler için bağlam menüsü

  • TextField nesnesinde (veya TextField'ı genişleten bir nesnede) seçilen metin için bağlam menüsü

Bağlam menüleri hakkında

SWF içeriğinde, InteractiveObject nesnesinden miras alınan her nesnenin contextMenu özelliğine bir menü nesnesi atanarak, bu nesneye bir bağlam menüsü verilebilir. Varsayılan olarak İleri, Geri, Yazdır, Kalite, ve Yakınlaştır komutları dahil edilmiştir. AIR çalışma zamanında, contextMenu öğesine atanan menü nesnesi NativeMenu veya type ContextMenu tipinde olabilir. Flash Player çalışma zamanında, yalnızca ContextMenu sınıfı kullanılabilir.

ContextMenu ve ContextMenuItem sınıflarını kullanırken yerel menü olaylarını veya bağlam menüsü olaylarını dinleyebilirsiniz; her ikisi de gönderilir. ContextMenuEvent nesnesinin özelliklerinin sağladığı bir fayda contextMenuOwner öğesinin menünün ekleneceği nesneyi ve mouseTarget öğesinin menüyü açmak için tıklatılan nesneyi tanımlamasıdır. Bu bilgi NativeMenuEvent nesnesinde bulunmaz.

Aşağıdaki örnek bir hareketli görüntü oluşturur ve basit bir düzenleme bağlam menüsü ekler:

var sprite:Sprite = new Sprite(); 
sprite.contextMenu = createContextMenu() 
private function createContextMenu():ContextMenu{ 
    var editContextMenu:ContextMenu = new ContextMenu(); 
    var cutItem:ContextMenuItem = new ContextMenuItem("Cut") 
    cutItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, doCutCommand); 
    editContextMenu.customItems.push(cutItem); 
     
    var copyItem:ContextMenuItem = new ContextMenuItem("Copy") 
    copyItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, doCopyCommand);             
    editContextMenu.customItems.push(copyItem); 
     
    var pasteItem:ContextMenuItem = new ContextMenuItem("Paste") 
    pasteItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, doPasteCommand); 
    editContextMenu.customItems.push(pasteItem); 
         
    return editContextMenu 
} 
private function doCutCommand(event:ContextMenuEvent):void{trace("cut");} 
private function doCopyCommand(event:ContextMenuEvent):void{trace("copy");} 
private function doPasteCommand(event:ContextMenuEvent):void{trace("paste");}
Not: Tarayıcı ortamında görüntülenen SWF içeriğinin aksine, AIR'deki bağlam menüleri yerleşik komutlar içermez.

Bir Flash Player bağlam menüsünü özelleştirme

Bir tarayıcıda veya projektörde, SWF içeriğindeki bağlam menüleri her zaman yerleşik öğeler içerir. Menüden Ayarlar ve Hakkında komutları hariç tüm bu varsayılan komutları kaldırabilirsiniz. Bunun için Sahne alanı showDefaultContextMenu özelliğine false değerini vermeniz gerekir.

Bir görüntüleme nesnesine özel bir bağlam menüsü oluşturmak için yeni bir ContextMenu sınıfı örneği oluşturun, hideBuiltInItems() yöntemini çağırın ve bu örneği DisplayObject örneğinin contextMenu özelliğine atayın. Aşağıdaki örnek dinamik olarak çizilmiş olan ve rastgele bir renk verme komutu içeren bağlam menüsüne sahip bir kare sağlar:

var square:Sprite = new Sprite(); 
square.graphics.beginFill(0x000000); 
square.graphics.drawRect(0,0,100,100); 
square.graphics.endFill(); 
square.x = 
square.y = 10; 
addChild(square); 
 
var menuItem:ContextMenuItem = new ContextMenuItem("Change Color"); 
menuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,changeColor); 
var customContextMenu:ContextMenu = new ContextMenu(); 
customContextMenu.hideBuiltInItems(); 
customContextMenu.customItems.push(menuItem); 
square.contextMenu = customContextMenu; 
 
function changeColor(event:ContextMenuEvent):void 
{ 
    square.transform.colorTransform = getRandomColor(); 
} 
function getRandomColor():ColorTransform 
{ 
    return new ColorTransform(Math.random(), Math.random(),         Math.random(),1,(Math.random() * 512) - 255,         (Math.random() * 512) -255, (Math.random() * 512) - 255, 0); 
}

Yerleşik menü yapısı (AIR)

Yerleşik menüler yapıları gereği hiyerarşiktir. NativeMenu nesneleri, alt NativeMenuItem nesneleri içerebilir. Alt menüleri temsil eden NativeMenuItem nesneleri, buna karşılık NativeMenu nesnelerini içerebilir. Yapıdaki üst veya kök düzey menü nesneleri, uygulama ve pencere menülerine ilişkin menü çubuğunu temsil eder. (Bağlam menüleri, simge menüleri ve açılır menüler menü çubuğu içermez.)

Aşağıdaki diyagram, tipik bir menünün yapısını gösterir. Kök menü, menü çubuğunu temsil eder ve Dosya alt menüsü ile Düzen alt menüsüne başvuruda bulunan iki menü öğesi içerir. Bu yapıdaki Dosya alt menüsü iki komut öğesinin yanı sıra Son Kullanılan Menüyü Aç alt menüsüne başvuruda bulunan ve kendisi üç öğe içeren bir öğeyi içerir. Düzen alt menüsü üç komut ve bir ayırıcı içerir.

Alt menünün tanımlanması, hem NativeMenu hem de NativeMenuItem nesnesini gerektirir. NativeMenuItem nesnesi, üst menüde görüntülenen etiketi tanımlar ve kullanıcının alt menüyü açmasını sağlar. NativeMenu nesnesi, alt menüdeki öğeler için kap işlevi görür. The NativeMenuItem nesnesi, NativeMenuItem submenu özelliği aracılığıyla NativeMenu nesnesine başvuruda bulunur.

Bu menüyü oluşturan bir kod örneğini görüntülemek için bkz. Yerel menü örneği: Pencere ve uygulama menüsü (AIR).

Menü olayları

NativeMenu ve NativeMenuItem nesneleri preparing, displaying ve select olaylarını gönderir:

Preparing: Nesne bir kullanıcı etkileşimine başlamak üzere olduğunda, menü ve menü öğeleri kayıtlı dinleyicilerine bir preparing olayı gönderir. Etkileşim bir menü açmayı veya klavye kısayoluyla bir öğe seçmeyi de içerir.
Not: preparing olayı yalnızca Adobe AIR 2.6 ve sonrasında mevcuttur.
Görüntüleme:
Menü görüntülenmeden hemen önce, menü ve menü öğeleri tüm kayıtlı dinleyicilere bir displaying olayı gönderir.

preparing ve displaying olayları kullanıcıya gösterilmeden önce menü içeriğini veya öğe görüntüsünü güncellemeniz için fırsat verir. Örneğin, “Son Kullanılanları Aç” menüsünün displaying olayına ilişkin dinleyicide, menü öğelerini son görüntülenen belgelerin güncel listesini yansıtacak biçimde değiştirebilirsiniz.

Klavye kısayolu preparing olayını tetikleyen bir menü öğesini kaldırırsanız, menü etkileşimi başarıyla iptal edilir ve select olayı gönderilmez.

Olayın target ve currentTarget özellikleri dinleyicinin kayıtlı olduğu öğenin nesneleridir: menünün kendisi veya menü öğelerinden biri.

preparing olayı displaying olayından önce gönderilir. Genellikle ikisini birden değil bir olayı ya da diğerini dinlersiniz.

Seç:
Kullanıcı bir komut öğesini seçtiğinde öğe kayıtlı dinleyicilere bir select olayı gönderir. Alt menü ve ayırıcı öğeleri seçilemez ve bu nedenle hiçbir zaman select olayı gönderemez.

select olayı, bir menü öğesinden bu öğeyi içeren menüye doğru ve kök menüye kadar baloncuk oluşturur. Select olaylarını doğrudan bir öğe üzerinde veya daha yüksek sesle menü yapısında dinleyebilirsiniz. Menüde select olayını dinlediğinizde, olayın target özelliğini kullanarak seçilen öğeyi tanımlayabilirsiniz. Olay menü hiyerarşisi boyunca kabarcık oluştururken olay nesnesinin currentTarget özelliği geçerli menü nesnesini tanımlar.

Not: ContextMenu ve ContextMenuItem nesneleri select, preparing ve displaying olaylarının yanı sıra menuItemSelect ve menuSelect olaylarını gönderir.

Yerleşik menü komutlarına ilişkin anahtar eşdeğerleri (AIR)

Menü komutuna bir tuş eşdeğeri (bazen hızlandırıcı olarak adlandırılır) atayabilirsiniz. Tuşa veya tuş bileşimine basıldığında, menü öğesi kayıtlı dinleyicilere bir select olayı gönderir. Komutun çağrılması için, öğeyi içeren menü uygulama menüsünün veya etkin pencerenin bölümü olmalıdır.

Tuş eşdeğerleri, ana anahtarı temsil eden bir dize ve ayrıca basılması gereken bir dizi değiştirici tuş olmak üzere iki bölümden oluşur. Ana anahtarı atamak için, menü öğesi keyEquivalent özelliğini bu tuş için tek karakter dizesi olarak ayarlayın. Büyük harf kullandığınızda, shift tuşu değiştirici dizisine otomatik olarak eklenir.

Mac OS X'te, varsayılan değiştirici (Keyboard.COMMAND) komut tuşudur. Windows ve Linux'ta, ctrl tuşudur (Keyboard.CONTROL). Bu varsayılan tuşlar değiştirici dizisine otomatik olarak eklenir. Farklı değiştirici tuşlar atamak için keyEquivalentModifiers özelliğine istenen tuş kodlarını içeren yeni bir dizi atayın. Varsayılan dizinin üzerine yazılır. Varsayılan değiştiricileri kullansanız da kendi değiştirici dizinizi atasanız da, keyEquivalent özelliğine atadığınız dize büyük harf olduğunda shift tuşu eklenir. Değiştirici tuşlar için kullanılacak tuş kodlarına ilişkin sabitler Keyboard sınıfında tanımlanır.

Atanan tuş eşdeğer dizesi, otomatik olarak menü öğesi adının yanında görüntülenir. Biçim kullanıcının işletim sistemine ve sistem tercihlerine bağlıdır.

Not: Windows işletim sisteminde bir tuş değiştirici dizisine Keyboard.COMMAND değerini atadığınızda, menüde tuş eşdeğeri görüntülenmez. Ancak, menü komutunu etkinleştirmek için ctrl tuşu kullanılmalıdır.

Aşağıdaki örnek, menü öğesine ilişkin tuş eşdeğeri olarak Ctrl+Shift+G tuşlarını atamaktadır:

var item:NativeMenuItem = new NativeMenuItem("Ungroup"); 
item.keyEquivalent = "G"; 

Bu örnek, doğrudan değiştirici dizisini ayarlayarak tuş eşdeğeri olarak Ctrl+Shift+G tuşlarını atar:

var item:NativeMenuItem = new NativeMenuItem("Ungroup"); 
item.keyEquivalent = "G"; 
item.keyEquivalentModifiers = [Keyboard.CONTROL]; 
Not: Tuş eşdeğerleri yalnızca uygulama ve pencere menüleri için tetiklenir. Bağlam menüsüne veya açılır menüye bir tuş eşdeğeri atadığınızda, tuş eşdeğeri menü etiketinde görüntülenir, ancak ilişkili menü komutu hiçbir zaman çağrılmaz.

Anımsatıcılar (AIR)

Anımsatıcılar, menülere ilişkin işletim sistemi klavye arabiriminin bir parçasıdır. Linux, Mac OS X ve Windows kullanıcıların klavye yoluyla menüleri açmasına ve komutları seçmesine olanak verir, ancak arada küçük farklar vardır.

Mac OS X'te kullanıcı menünün ilk veya iki harfini yazar ve ardından return tuşuna basar. mnemonicIndex özelliği yok sayılır.

Windows'ta yalnızca tek bir harf önemlidir. Varsayılan olarak, önemli harf etiketteki ilk karakterdir. Ancak menü öğesine bir anımsatıcı atadığınızda, önemli karakter belirlenen harf olarak değişir. Bir menüdeki iki öğe aynı önemli karaktere sahip olduğunda (anımsatıcı atanmış olup olmaması önemli değildir) kullanıcının menü ile klavye etkileşimi biraz değişir. Kullanıcı, menüyü veya komutu seçmek üzere tek bir harfe basmak yerine, harfe istenen öğeyi vurgulamak için gerekli olduğu kadar basmalı ve daha sonra seçimi tamamlamak için Enter tuşunu kullanmalıdır. Tutarlı davranışı korumak için, pencere menülerine ilişkin bir menüdeki her öğeye benzersiz bir anımsatıcı atamanız tavsiye edilir.

Linux'ta varsayılan bir anımsatıcı sunulmaz. Bir anımsatıcı sağlamak için menü öğesinin mnemonicIndex özelliği için bir değer belirlemelisiniz.

Anımsatıcı karakteri etiket dizesinde dizin olarak belirleyin. Etiketteki ilk karakterin dizini 0'dır. Bu nedenle, etiketlenen menü öğesi “Format” için “r” anımsatıcısını kullanmak üzere mnemonicIndex özelliğini 2'ye eşitlemelisiniz.

var item:NativeMenuItem = new NativeMenuItem("Format"); 
item.mnemonicIndex = 2; 

Menü öğesi durumu

Menü öğeleri iki durum özelliğine sahiptir, checked ve enabled:

checked
Öğe etiketinin yanında bir onay işareti görüntülemek için true özelliğini belirleyin.
var item:NativeMenuItem = new NativeMenuItem("Format"); 
item.checked = true; 

enabled
Komutun etkin olup olmadığını kontrol etmek için değeri true ve false arasında değiştirin. Etkin olmayan öğeler silik bir görselliğe sahiptir ve select olayları göndermez.
var item:NativeMenuItem = new NativeMenuItem("Format"); 
item.enabled = false; 

Menü öğesine nesne ekleme

NativeMenuItem sınıfının data özelliği, her öğede rastgele bir nesneye başvuruda bulunabilmenizi sağlar. Örneğin, “Son Kullanılanları Aç” menüsünde her bir menü öğesine her belge için File nesnesi atayabilirsiniz.

var file:File = File.applicationStorageDirectory.resolvePath("GreatGatsby.pdf") 
var menuItem:NativeMenuItem = docMenu.addItem(new NativeMenuItem(file.name)); 
menuItem.data = file;