|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Nov 2006
Сообщений: 176
|
Обработка события для своего компонента
Я хочу создать Drag'n'Drop для своего компонента, но хочу что бы перетаскивание происходило только за титульную область компонента, как окно...
Вопрос, как из главной программы получать currentTarget для элемента в моём компоненте при появлении события к моему компоненту, например, MouseDown... |
|
|||||
написать собственное событие.
__________________
Работаю |
|
|||||
Регистрация: Nov 2006
Сообщений: 176
|
Вот написал код компонента StringItem:
<?xml version="1.0" encoding="utf-8"?> <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="154" height="48" borderStyle="solid" borderThickness="2" borderColor="#9898DC" backgroundColor="#EAD2D2" > <mx:Metadata> [Event(name="canvasMove", type="flash.events.MouseEvent") ] </mx:Metadata> <mx:Script> <![CDATA[ [Bindable] public var dataProvider:String = "Test"; public function onCanvasDown():void{ var event:MouseEvent = new MouseEvent("canvasMove"); dispatchEvent(event); } ]]> </mx:Script> <mx:Canvas height="17" top="0" left="0" right="0" backgroundColor="#2020A1" mouseMove="onCanvasDown()" /> </mx:Canvas> <?xml version="1.0"?> <!-- dragdrop\DandDImageCopyMove.mxml --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:mc="MyComponents.*" > <mx:Script> <![CDATA[ import MyComponents.StringItem; import mx.core.DragSource; import mx.managers.DragManager; import mx.events.*; import mx.containers.Canvas; private function mouseMoveHandler(event:MouseEvent):void { var dragInitiator:StringItem=StringItem(event.currentTarget); var dragText:String = dragInitiator.dataProvider; var ds:DragSource = new DragSource(); ds.addData(dragText, 'text'); DragManager.doDrag(dragInitiator, ds, event); } private function dragEnterHandler(event:DragEvent):void { if (event.dragSource.hasFormat('text')) { var dropTarget:TextArea=TextArea(event.currentTarget); DragManager.acceptDragDrop(dropTarget); } } private function dragDropHandler(event:DragEvent):void { var data:Object = event.dragSource.dataForFormat('text'); TextArea(event.currentTarget).text += data + "\n"; } ]]> </mx:Script> <mx:TextArea id="ta" x="39" y="65" height="241" width="117" dragEnter="dragEnterHandler(event);" dragDrop="dragDropHandler(event);" /> <mc:StringItem canvasMove="mouseMoveHandler(event);" id="si" x="241" y="84" height="49" width="97"/> </mx:Application> на образ компонента распологается там где был произведён захват, то есть правильно... но перемещение за титульник уже не работает естественно... + вопрос, отличается чем-то библиотеки mx.events и flash.events? Можно ли создать реализацию Drag'n'Dropa в самом компоненте, а не в главном приложении.. Чтобы оно было готово сразу же при добавлении компонента в главное приложение... вот написал такой компонент: <?xml version="1.0" encoding="utf-8"?> <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100" height="100" creationComplete="initApp();" backgroundColor="#B84545" borderColor="#655CDA" borderStyle="solid" borderThickness="3" backgroundAlpha="0.4" alpha="0.5"> <mx:Script> <![CDATA[ public function initApp():void{ addDrag(); } public function addDrag():void{ this.addEventListener(MouseEvent.MOUSE_DOWN,dispObjStartDrag); } public function delDrag():void{ this.removeEventListener(MouseEvent.MOUSE_DOWN, dispObjStartDrag); } private function dispObjStartDrag(e:MouseEvent):void{ e.currentTarget.addEventListener(MouseEvent.MOUSE_MOVE,updateDrag) e.currentTarget.startDrag(); e.currentTarget.addEventListener(MouseEvent.MOUSE_UP, function (e:MouseEvent):void{ e.currentTarget.stopDrag(); e.currentTarget.removeEventListener(MouseEvent.MOUSE_MOVE,updateDrag) } ) }; public function updateDrag(e:MouseEvent):void{ e.updateAfterEvent(); } ]]> </mx:Script> </mx:Canvas> Последний раз редактировалось etc; 01.03.2008 в 00:43. |
|
|||||
Регистрация: Nov 2006
Сообщений: 176
|
Столкнулся с проблемой, не при перетаскивании изображения-образа не обабатывается событе MouseOver для объекта, который может принять данные...
какие могут быть варианты решения этой проблемы? Помогите пожалуйста, иначе, о горе!...мне придётся использовать стандартную реализацию. Последний раз редактировалось Pow R. Toc H.; 05.03.2008 в 19:29. |
Часовой пояс GMT +4, время: 15:10. |
|
« Предыдущая тема | Следующая тема » |
|
|