티스토리 뷰
플래시에서 오른쪽 버튼 누르게 되면 플래시의 고정된 컨텍스트 메뉴가 뜨는데, ContextMenu 객체를 이용해 이 항목들을 변경 할 수 있습니다.
참고로, ContextMenu 클래스는 final 로 선언되어 있어 더 이상 확장할 수 없습니다.
여기 예제는 사각형에 2개의 메뉴를 추가하여 컨텍스트 메뉴를 변경한 간단한 코드 입니다.
아래 코드가 바로 sprite 객체와, 메뉴 항목을 컨텍스트 클래스로 넘겨주어 생성하는 부분입니다.
new CustomContextMenu(sprite, menuItems);
CustomContextMenu 클래스를 보면 어떻게 등록하고 변경하는지 알 수 있습니다. Adobe ActionScript3.0 Language Reference 에서 ContextMenu 클래스의 예제를 간략하게 사용자가 정하는 메뉴항목을 등록할 수 있게 수정해 놓은 클래스입니다.
자신의 입맛에 맞게 변경해서 사용하세요. :)
// ./CustomContextMenu.fla import Lib.ui.CustomContextMenu; var sprite:Sprite = new Sprite(); sprite.graphics.beginFill(0x000000FF); sprite.graphics.drawRect(0, 0, 100, 100); sprite.graphics.endFill(); sprite.name = "mcTestSprite"; sprite.x = (stage.stageWidth - 100) / 2; sprite.y = (stage.stageHeight - 100) / 2; addChild(sprite); // 컨텍스트 메뉴 목록 var menuItems:Array = [ { label: "객체 이름", handler: getName }, { label: "객체 삭제", handler: doDelete } ]; // new CustomContextMenu( 추가할객체 , 추가할메뉴목록 ); var context:Sprite = new CustomContextMenu(sprite, menuItems); // 메뉴 핸들러 함수 // 객체 이름 function getName(evt:ContextMenuEvent):void { trace("getName() : "+ evt); trace("객체 이름 : "+ evt.mouseTarget.name); } // 객체 삭제 function doDelete(evt:ContextMenuEvent):void { trace("doDelete() : "+ evt); removeChild(evt.mouseTarget); }
// ./Lib/ui/CustomContextMenu.as package Lib.ui { // {{{ Libraries import flash.ui.ContextMenu; import flash.ui.ContextMenuItem; import flash.ui.ContextMenuBuiltInItems; import flash.events.ContextMenuEvent; import flash.display.Sprite; // }}} // {{{ Class public class CustomContextMenu extends Sprite { // {{{ Properties // 컨텍스트 메뉴 대상 private var _contextTarget:Object = null; // 컨텍스트 메뉴 private var _contextMenu:ContextMenu; // 메뉴 아이템 private var _contextMenuItems:Array; // }}} // {{{ Methods /** * public constructor * * CustomContextMenu * * @param (Object) target 컨텍스트 메뉴를 적용할 대상 * @param (Array) menuItems (optional) 메뉴 항목들 * @return (void) */ public function CustomContextMenu(target:Object, menuItems:Array = null) { if (target.hasOwnProperty("contextMenu") === false) { throw new Error("컨텍스트 메뉴를 적용할 수 없는 객체 입니다."); } this._contextTarget = target; this._contextMenu = new ContextMenu(); this.removeDefaultItems(); if (menuItems !== null) { this.contextMenuItem = menuItems; this.addContextMenu(); } this._contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, this.menuSelectHandler); this._contextTarget.contextMenu = this._contextMenu; } /** * private * * removeDefaultItems : 기본 컨텍스트 메뉴 항목들을 삭제 * * @return (void) */ private function removeDefaultItems():void { this._contextMenu.hideBuiltInItems(); var defaultItems:ContextMenuBuiltInItems = this._contextMenu.builtInItems; defaultItems.print = true;// 기본 컨텍스트 메뉴 중에서 "인쇄" 항목은 삭제하지 않으려면 } /** * private * * addContextMenu : 컨텍스트 메뉴에 메뉴 추가 * 입력된 컨텍스트 메뉴를 반복하며 메뉴 항목 추가 * * @return (void) */ private function addContextMenu():void { var menus:Array = this.contextMenuItem; for (var n:int = 0, c:int = menus.length; n < c; n++) { this._addContextMenuItem(menus[n]); } } /** * private * * _addContextMenuItem : 컨텍스트 메뉴에 메뉴 항목 한개 추가 * 인자값은 객체로 아래 형식으로 넘겨줌 * { label: 메뉴명, handler: 처리함수 } * * @param (Object) menuItem 메뉴 아이템 * @return (void) */ private function _addContextMenuItem(menuItem:Object):void { var item:ContextMenuItem = new ContextMenuItem(menuItem["label"]); this._contextMenu.customItems.push(item); item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItem["handler"]); } /** * private * * menuSelectHandler : 컨텍스트 이벤트가 발생했을때 콜백 함수 * * @param (ContextMenuEvent) evt 이벤트 * @return (void) */ private function menuSelectHandler(evt:ContextMenuEvent):void { } // }}} // {{{ Getter / Setter // 입력된 컨텍스트 메뉴 정보를 저장 public function set contextMenuItem(menuItems:Array):void { this._contextMenuItems = menuItems; } // 컨텍스트 메뉴 정보를 반환 public function get contextMenuItem():Array { return this._contextMenuItems; } } }
참고사이트
- [ActionScript3.0 Language Reference] ContextMenu
'프로그래밍 > ActionScript' 카테고리의 다른 글
[AS3] 콜백함수를 편하게 관리하기 : Later Class (0) | 2011.01.29 |
---|---|
[LoaderMax] XML을 통해 이미지를 불러올때, URL 경로 변경하기 (0) | 2010.12.16 |
[AS2] 액션스크립트2.0에서 자식객체 갯수 구하기 (0) | 2010.12.16 |
[AS3] 투명 무비클립 비트맵 합치기(Merge transparent MovieClip to BitmapData) (0) | 2010.05.14 |
[AS3] 플래시에서 마이크 이용 (0) | 2010.03.08 |
[AS3] 배열 복제하기(Array Cloning) - concat() 메소드 활용 (0) | 2010.02.24 |
[AS3] Timer 객체 사용시 TIMER_COMPLETE 이벤트 주의할 점 (0) | 2010.01.30 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 스타크래프트2
- 유틸리티
- It
- 정규표현식
- 프로그래밍
- 게임
- 정보
- 보안정보
- game
- eve online
- dust 514
- flash
- ActionScript3.0
- as3
- Utilities
- 블레이드앤소울
- PCRE
- 팁&정보
- 플래시
- 해킹
- php
- 액션스크립트3
- 스크린샷
- 자바스크립트
- 팁
- 이브 온라인
- JavaScript
- 정규식
- 세비지2
- 보안
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함