Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.05.2009, 21:23
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 1  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
Question вложеные компоненты и dragManager

ситуация: есть два компонента (один в одном). на них можно перетащить другой компонент (инициатор). только необходимо организовать различное поведение при отпускани инициатора.
подписался на события DRAG_ENTER и DRAG_DROP.
при наведении на вложеный компонент DRAG_ENTER сробатывает для обоих компонентах, но при отпускании DRAG_DROP срабатывает только для родительского (контейнера).

необходимо, чтобы при наведении на пустое место (надпись "test" в прилагаемом файле) срабатывал обработчик контейнера, а при наведение на вложенный компонент (ораньжевый прямоугольник в прилагаемом файле) срабатывал обработчик этого компонента.

может я что-то не так сделал?
Изображения
 
__________________
я могу стать всем, если только захочу

Старый 29.05.2009, 22:52
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Предположительно криво работает драг-менеджер.

Старый 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.
Создать новую тему Ответ Часовой пояс GMT +4, время: 03:33.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
dragManager

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 03:33.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.