Показать сообщение отдельно
Старый 30.05.2009, 00:39
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 3  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
просмотрел исходники драгменеджера. работает он нормально. он просто диспатчит событие DRAG_ENTER всем компонентам начиная с самого глубокого. при этом он запоминает самый верхний компонент. именно ему он и диспатчит событие DRAG_DROP при отпускании.
хотя наверно логичнее было бы диспатчить наиболее глубокому компоненту.

привожу свое решение.
Код AS3:
//поиск родительского UIComponent для DisplayObject
protected function getUIComponentFromDisplayObject(target:DisplayObject):UIComponent
{
	var curObject:DisplayObject = target;
	while (curObject)
	{
		if (curObject is UIComponent)
		{
			return curObject as UIComponent;
		}
		curObject = curObject.parent;
	}
	return null;
}
 
//возвращает самый вложеный объект, который подписан на DRAG_DROP
protected function testOther(x:Number, y:Number):UIComponent
{
	var point:Point = new Point(x, y);
	point = DisplayObject(this).localToGlobal(point);
	point = DisplayObject(this.systemManager.topLevelSystemManager).globalToLocal(point);
	var mouseX:Number = point.x;
	var mouseY:Number = point.y;
	//получаем список всех компонентов под курсором
	var targetList:Array = DisplayObjectContainer(this.systemManager.topLevelSystemManager).getObjectsUnderPoint(new Point(mouseX, mouseY));
 
	var uiTarget:UIComponent = null;
	var rez:UIComponent = null;
 
	for each (var tmpTarget:DisplayObject in targetList)
	{
		uiTarget = getUIComponentFromDisplayObject(tmpTarget);
 
		if (uiTarget && uiTarget.hasEventListener(DragEvent.DRAG_DROP))
		{
			rez = uiTarget;
		}
	}
 
	return rez;
}
 
protected function dragDropHandler(event:DragEvent):void 
{
	_title.setStyle("borderStyle","none");
	_title.setStyle("borderThickness","0");
 
	var otherObject:UIComponent = testOther(event.localX, event.localY);
	if (otherObject && (otherObject !== this))
	{
		otherObject.dispatchEvent(event.clone());
		return;
	}
	/* ... */
}
__________________
я могу стать всем, если только захочу


Последний раз редактировалось Felicast; 30.05.2009 в 15:22.