浅谈FLASH右键菜单修改

    文章来源:万象互联 更新时间:2012-11-29 17:25:36
分享:

首先来了解ContextMenu的基本常识。

ContextMenu 类提供对Flash Player 上下文菜单项的运行时控制,当用户在Flash Player 中右键单击(在Windows 中)或按住Control 键并单击(在Macintosh 中)时,将出现上下文菜单。您可以使用ContextMenu 类的方法和属性添加自定义菜单项,控制内置上下文菜单项的显示(例如"放大"和"打印"),或者创建菜单的副本。

Flash Player 具有三种类型的上下文菜单:标准菜单(当您在Flash Player 中右键单击时出现)、编辑菜单(当您在可选择或可编辑的文本字段上右键单击时出现)和错误菜单(当SWF 文件未能加载到Flash Player 中时出现)。只有标准菜单和编辑菜单才能使用ContextMenu 类进行修改。

自定义菜单项始终出现在Flash Player 上下文菜单的顶部,并位于所有可见内置菜单项之上;内置菜单项和自定义菜单项之间由一个分隔条加以分隔。向上下文菜单添加的自定义菜单项不得超过15 个。您不能从上下文菜单中删除"设置"菜单项。在Flash 中,必须有"设置"菜单项,有了这个菜单项后,用户才能访问影响其计算机上的隐私和存储的设置。您也不能从上下文菜单中删除"关于"菜单项,必须在使用这个菜单项后,用户才能了解正在使用的Flash Player 的版本信息。

必须使用构造函数new ContextMenu() 创建ContextMenu 对象才能调用其方法。

 

一、ContextMenu.builtInItems 属性

public builtInItems : Object

具有以下布尔属性的对象:zoom、quality、play、loop、rewind、forward_back 和print。将这些变量设置为false 将删除指定的ContextMenu 对象中的相应菜单项。这些属性是可枚举的属性,默认情况下设置为true。

如:对于附加到SWF 文件的当前时间轴的ContextMenu 对象my_cm,内置"品质"和"打印"菜单项被禁用。

var my_cm:ContextMenu = new ContextMenu (); 

my_cm.builtInItems.quality = false; 

my_cm.builtInItems.print = false; 

this.menu = my_cm; 

 

二、ContextMenu 构造函数

public ContextMenu([callbackFunction:Function])

callbackFunction:Function [可选] - 对函数的引用,该函数在用户右键单击或按住Control 键单击菜单并在菜单显示之前被调用。

如:隐藏上下文菜单中的所有内置对象。(但是,由于不能禁用"设置"和"关于"菜单项,所以它们仍会出现。)

var newMenu:ContextMenu = new ContextMenu(); 

newMenu.hideBuiltInItems(); 

this.menu = newMenu; 

 

三、copy(ContextMenu.copy 方法)

public copy() : ContextMenu

创建指定的ContextMenu 对象的副本。该副本继承初始菜单对象的所有属性。

如:创建名为my_cm 的ContextMenu 对象的副本(其内置菜单项被隐藏),并添加具有文本"Save..."的菜单项。然后,该示例创建my_cm 的副本,并将它分配给变量clone_cm,该变量继承原始菜单的所有属性。

var my_cm:ContextMenu = new ContextMenu(); 

my_cm.hideBuiltInItems(); 

var menuItem_cmi:ContextMenuItem = new ContextMenuItem("Save...",saveHandler); 

my_cm.customItems.push(menuItem_cmi); 

function saveHandler(obj, menuItem) { 

// saveDocument(); 

// custom function (not shown) 

trace("something"); 

clone_cm = my_cm.copy(); 

this.menu = my_cm;  

for (var j in clone_cm.customItems) { 

trace("clone_cm-> "+clone_cm.customItems[j].caption); 

for (var j in my_cm.customItems) { 

trace("my_cm-> "+my_cm.customItems[j].caption); 

 

四、customItems(ContextMenu.customItems 属性)

public customItems : Array

ContextMenuItem 对象的数组。数组中的每个对象表示您已经定义的上下文菜单项。使用此属性可添加、删除或修改这些自定义菜单项。若要添加新的菜单项,请首先创建一个新的ContextMenuItem 对象,然后将其添加到menu_mc .customItems 数组(例如使用Array.push())。

如:创建一个新的名为menuItem_cmi 的自定义菜单项(其标题为"发送电子邮件")和一个名为emailHandler 的回调处理函数。然后,使用customItems 数组将新的菜单项添加到ContextMenu 对象my_cm。最后,将新菜单附加到名为email_mc 的影片剪辑。若要使此示例正常运行,请在舞台上创建影片剪辑实例,然后使用属性检查器将该实例命名为email_mc。在"测试影片"模式中,如果在鼠标指针位于email_mc 影片剪辑上方时弹出上下文菜单,将出现新的上下文菜单项。

var my_cm:ContextMenu = new ContextMenu(); 

var menuItem_cmi:ContextMenuItem = new ContextMenuItem("Send e-mail",emailHandler); 

my_cm.customItems.push(menuItem_cmi); 

email_mc.menu = my_cm; 

function emailHandler() { 

trace("sending email"); 

 

五、hideBuiltInItems(ContextMenu.hideBuiltInItems 方法)

 

public hideBuiltInItems() : Void

隐藏指定的ContextMenu 对象中的所有内置菜单项("设置"除外)。如果Flash 调试播放器正在运行,则显示"调试"菜单项,但如果SWF 文件未启用远程调试功能,则该菜单项将变暗。

如:创建其内置菜单项已隐藏("打印"除外)的新的ContextMenu 对象my_cm。然后将该菜单对象附加到当前时间轴。

var my_cm:ContextMenu = new ContextMenu(); 

my_cm.hideBuiltInItems(); 

my_cm.builtInItems.print = true; 

this.menu = my_cm; 

 

六、onSelect(ContextMenu.onSelect 处理函数)

onSelect = function(item:Object, item_menu:Object) {}

在用户调用Flash Player 上下文菜单并在该菜单实际显示之前调用。此事件处理函数允许根据当前应用程序状态自定义上下文菜单的内容。

如:确定对哪种类型的对象调用了上下文菜单。

my_cm:ContextMenu = new ContextMenu(); 

function menuHandler(obj:Object, menu:ContextMenu) { 

if (objinstanceofMovieClip) { 

trace("Movie clip: " + obj);  

if (objinstanceofTextField) { 

trace("Text field: " + obj); 

if (objinstanceofButton) { 

trace("Button: " + obj); 

my_cm.onSelect = menuHandler; 

my_mc.menu = my_cm; 

my_btn.menu = my_cm;

文章来源:http://www.hulian.top,转载请注明!

版权说明:本站原创文章,由万象互联SEO优化发表.
本文地址:https://www.hulian.top/zixun/post/5456.html
在线咨询
  • 在线时间
  • 8:00-21:00