Основные сведения о менюFlash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий Краткое разъяснение и примеры кодов с созданием собственных меню в приложениях AIR см. в следующих статьях по быстрому началу работы в центре Adobe Developer Connection: Классы исходных меню обеспечивают доступ к функциям исходных меню операционной системы, в которой выполняется приложение. Объекты NativeMenu могут применяться для создания меню программы (в Mac OS X), меню окна (в Windows и Linux), контекстных и всплывающих меню. Вне AIR вы можете использовать классы контекстного меню для преобразования контекстного меню, которое Flash Player автоматически отображает, когда пользователь щелкает правой кнопкой или щелкает с удержанием клавиши «Command» на объекте вашего приложения. (Автоматическое контекстное меню для приложений AIR не отображается.) Разновидности менюНиже перечислены поддерживаемые AIR типы меню.
Меню по умолчанию (только для AIR)Ниже перечислены меню по умолчанию, предоставляемые операционной системой или встроенным классом AIR:
О контекстных менюВ SWF-содержимом любой объект-наследник InteractiveObject может иметь контекстное меню. Для этого нужно назначить объект меню его свойству contextMenu. Некоторые команды включены по умолчанию, например «Вперед», «Назад», «Печать», «Качество» и «Масштаб». В среде выполнения AIR объект меню, назначенный свойству contextMenu, может относиться к типу NativeMenu или ContextMenu. В среде выполнения Flash Player доступен только класс ContextMenu. Можно выполнять прослушивание либо событий исходных меню, либо событий контекстных меню, если используются классы ContextMenu и ContextMenuItem; при этом будут создаваться и те и другие события. Одним из преимуществ, обеспечиваемых свойствами объекта ContextMenuEvent, является то, что свойство contextMenuOwner идентифицирует объект, к которому прикреплено меню, а свойствоmouseTarget идентифицирует объект, который щелкнули для открытия меню. Эта информация не доступна из объекта NativeMenuEvent. В примере ниже показано, как создать спрайт и добавить простое контекстное меню правки: 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");}
Примечание. В отличие от SWF-содержимого, отображаемого в среде обозревателя, контекстные меню в среде AIR не имеют встроенных команд.
Настройка контекстного меню Flash PlayerВ браузере или проекторе контекстные меню в SWF-содержимом всегда содержат встроенные элементы. Из меню можно удалить все команды по умолчанию, кроме команд «Настройки» и «О программе». Если задать свойству рабочей области showDefaultContextMenu значение false, эти команды будут удалены из контекстного меню. Для создания персонализированного контекстного меню для конкретного экранного объекта создайте новый экземпляр класса ContextMenu, вызовите метод hideBuiltInItems() и назначьте этот экземпляр свойству contextMenu этого экземпляра DisplayObject. В примере ниже показан динамически рисуемый квадрат с командой контекстного меню, позволяющей изменить его цвет: 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);
}
Структура исходного меню (AIR)Исходные меню по своей природе имеют иерархическую структуру. Объекты NativeMenu содержат дочерние объекты NativeMenuItem. Объекты NativeMenuItem, представляющие подменю, в свою очередь, могут содержать объекты NativeMenu. Объект меню верхнего (корневого) уровня представляет строку меню программы или окна. (У контекстных и всплывающих меню, а также меню значков нет строки меню.) На схеме ниже показана типичная структура меню. Корневое меню — это строка меню, содержащая два пункта, указывающие на подменю Файл и Правка. Подменю «Файл» в этой структуре содержит две команды и пункт, ссылающийся на подменю Открыть последний файл, которое содержит еще три пункта. Подменю «Правка» содержит три команды и разделитель. Для определения подменю необходимы объекты NativeMenu и NativeMenuItem. Объект NativeMenuItem определяет текст заголовка, отображаемый в родительском меню, и позволяет пользователю открывать подменю. Объект NativeMenu служит контейнером для элементов подменю. Объект NativeMenuItem ссылается на объект NativeMenu через свойство submenu объекта NativeMenuItem. Пример кода, с помощью которого создается это меню, см. в разделе Пример собственного меню: меню окна и приложения (AIR). События менюОбъекты NativeMenu и NativeMenuItem отправляют события preparing, displaying и select: Preparing: каждый раз при начале взаимодействия объекта с пользователем меню и элементы меню отправляют событие preparing всем зарегистрированным прослушивателям. Взаимодействие включает открытие меню и выбор элемента меню с помощью клавиатурных сокращений.
Примечание. Событие preparing доступно только в Adobe AIR 2.6 и более поздних версиях.
Клавишные эквиваленты для команд исходного меню (AIR)Команде меню можно назначить клавишный эквивалент (иногда называемый ускорителем). Пункт меню отправляет событие select всем зарегистрированным прослушивателям, когда пользователь нажимает клавишу или комбинацию клавиш. Чтобы команда сработала, меню, содержащее элемент, должно быть частью меню программы или активного окна. Клавишные эквиваленты состоят из двух частей: строки, представляющей основную клавишу, и массива клавиш-модификаторов, которые также должны быть нажаты. Чтобы назначить основную клавишу, задайте для свойства keyEquivalent пункта меню односимвольную строку. При использовании верхнего регистра клавиша «Shift» автоматически добавляется в массив. В Mac OS X модификатором по молчанию является клавиша «Сommand» (Keyboard.COMMAND). В Windows или Linux это клавиша Сtrl (Keyboard.CONTROL). Эти клавиши по умолчанию добавляются в массив автоматически. Для назначения разных клавиш-модификаторов назначьте новый массив с кодами нужных клавиш в свойство keyEquivalentModifiers. Массив по умолчанию будет заменен на новый. Независимо от того, используете вы модификаторы по умолчанию или назначаете собственные, если строка, назначаемая свойству keyEquivalent, записана в верхнем регистре, клавиша «Shift» добавляется в массив автоматически. Константы кодов клавиш-модификаторов задаются классом Keyboard. Строка назначенного клавишного эквивалента автоматически выводится рядом с названием пункта меню. Формат зависит от операционной системы и ее настроек. Примечание. Если значение Keyboard.COMMAND назначено массиву модификаторов в ОС Windows, в меню не отображаются клавишные эквиваленты. Тем не менее для активации команд меню должна использоваться клавиша «Ctrl».
В примере ниже показано, как назначить пункту меню сочетание клавиш Ctrl+Shift+G: var item:NativeMenuItem = new NativeMenuItem("Ungroup");
item.keyEquivalent = "G";
В этом примере сочетание клавиш Ctrl+Shift+G назначается эквивалентом путем прямого задания массива модификаторов: var item:NativeMenuItem = new NativeMenuItem("Ungroup");
item.keyEquivalent = "G";
item.keyEquivalentModifiers = [Keyboard.CONTROL];
Примечание. Клавишные эквиваленты поддерживаются только в меню программы или окна. Если добавить клавишный эквивалент в контекстное или всплывающее меню, комбинация клавиш будет отображаться рядом с пунктом меню, но нужную команду с ее помощью вызвать не удастся.
Мнемонические клавиши (AIR)Мнемонические клавиши являются частью клавиатурного интерфейса операционных систем. Linux, Mac OS X и Windows позволяют открывать меню и выбирать команды с помощью клавиатуры, но существуют небольшие различия. В Mac OS X пользователь вводит первую букву или две в названии команды и нажимает клавишу Return. Свойство mnemonicIndex игнорируется. В Windows имеет значение только одна буква. По умолчанию значимой буквой является только первая буква в названии пункта меню, но если назначить элементу мнемоническую клавишу, то любая буква может стать значимым символом. Если два пункта меню имеют одинаковый значимый символ (неважно, назначена ли мнемоническая клавиша), то работа пользователя с меню несколько изменится. Вместо выбора меню или команды нажатием одной клавиши придется нажать эту клавишу столько раз, сколько потребуется для выделения нужного пункта, а затем нажать «Ввод» для подтверждения выбора. Чтобы избежать непредсказуемого поведения, следует назначать каждому пункту меню уникальную мнемоническую клавишу. В Linux мнемонические клавиши по умолчанию не заданы. Необходимо указать значение для свойства mnemonicIndex элемента меню, чтобы активировать мнемоническую клавишу. Задайте мнемонический символ путем назначения индекса строки названия пункта меню. Индекс первого символа — 0. Таким образом, чтобы использовать в качестве мнемонического символа для пункта меню букву «r», необходимо задать свойству mnemonicIndex значение 2. var item:NativeMenuItem = new NativeMenuItem("Format");
item.mnemonicIndex = 2;
Состояние пункта менюПункты меню имеют два свойства состояния: checked и enabled:
Прикрепление объекта к пункту менюСвойство data класса NativeMenuItem позволяет ссылаться на любой объект в каждом пункте. Например, в меню «Открыть последний файл» можно назначить каждому из пунктов меню объект File соответствующего документа. var file:File = File.applicationStorageDirectory.resolvePath("GreatGatsby.pdf")
var menuItem:NativeMenuItem = docMenu.addItem(new NativeMenuItem(file.name));
menuItem.data = file;
|
|