Просмотр полной версии : Обработка события для своего компонента
Pow R. Toc H.
27.02.2008, 04:59
Я хочу создать Drag'n'Drop для своего компонента, но хочу что бы перетаскивание происходило только за титульную область компонента, как окно...
Вопрос, как из главной программы получать currentTarget для элемента в моём компоненте при появлении события к моему компоненту, например, MouseDown...
написать собственное событие.
Pow R. Toc H.
28.02.2008, 02:43
Вот написал код компонента 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>
Всё работает, только при переносе компонента за титульник, образ компонента сдвигается так, что бы мышь находилась в левом верхнем углу компонента... если заменить строку
canvasMove="mouseMoveHandler(event);"
на
mouseMove="mouseMoveHandler(event);"
образ компонента распологается там где был произведён захват, то есть правильно... но перемещение за титульник уже не работает естественно...
+ вопрос, отличается чем-то библиотеки 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>
вроде работает.. теперь бы реализовать Drag'n'Drop как обмен данными..
Pow R. Toc H.
05.03.2008, 15:37
Столкнулся с проблемой, не при перетаскивании изображения-образа не обабатывается событе MouseOver для объекта, который может принять данные...
какие могут быть варианты решения этой проблемы?
Помогите пожалуйста, иначе, о горе!...мне придётся использовать стандартную реализацию.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.