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

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

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

Регистрация: Mar 2007
Сообщений: 36
Есть объект First:UIComponent, он находится в Panel1 - его ребенок.
Есть Panel2 - сюда необходимо перетащить объект UIComponent.
Создание объекта происходит с помощью AS.
Когда я перетаскиваю (1. startDrag(). 2.stopDrag()) , то фактически мой объект остается в том же Panel1, где он дочерний элемент, а визуально его можно до операции stopDrag() перенести в любую область экрана, только после stopDrag() он свои новые координаты отсчитывает в своем родительском элементе Panel1.
Хочу, чтобы при перетаскивании на Panel2, он добавлялся в Panel2 на указанное место.

Т.е. могу ли я определить в момент stopDrag над каким каким контейнером находится мой объект? Или можно сделать как-то иначе?


Последний раз редактировалось etc; 22.03.2007 в 17:10.
Старый 22.03.2007, 17:10
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Копай в сторону DragEvent.currentTarget
http://livedocs.macromedia.com/flex/...op_081_13.html

Старый 22.03.2007, 17:23
easyLife вне форума Посмотреть профиль Отправить личное сообщение для easyLife Найти все сообщения от easyLife
  № 3  
Ответить с цитированием
easyLife

Регистрация: Mar 2007
Сообщений: 36
Спасибо большое!!!!

Старый 22.03.2007, 20:43
easyLife вне форума Посмотреть профиль Отправить личное сообщение для easyLife Найти все сообщения от easyLife
  № 4  
Ответить с цитированием
easyLife

Регистрация: Mar 2007
Сообщений: 36
После DragManager.doDrag(dragInitiator, ds, event, dragInitiator); , объект, который перетаскивается (UIComponent) из Panel1 в Panel2 перестает быть дочерним в Panel1, но при попытке добавить его в Panel2 ( Panel2.addChild(First) ) выдает ошибку:
RangeError: Error #2006: The supplied index is out of bounds.

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

Регистрация: Sep 2002
Сообщений: 30,787
Давай ты соберешь нерабочий пример, а то мне собирать очередной проект не очень хочется

Старый 23.03.2007, 19:28
easyLife вне форума Посмотреть профиль Отправить личное сообщение для easyLife Найти все сообщения от easyLife
  № 6  
Ответить с цитированием
easyLife

Регистрация: Mar 2007
Сообщений: 36
Код:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init();">
	<mx:Script><![CDATA[
        import flash.geom.*;
        import flash.display.*;
        import flash.events.*;
        import flash.net.*;
        import flash.errors.*;
        import mx.managers.*;
        import mx.core.DragSource;
        import mx.events.*;
        import mx.controls.Image;
        import mx.graphics.*;
        import mx.core.*;
        //part for graphics =)))
        import mx.containers.Panel;
        
        var uic:UIComponent = new UIComponent();

        public function init() {
            img_panel.addEventListener(DragEvent.DRAG_ENTER, makeDragEnter);
            img_panel.addEventListener(DragEvent.DRAG_DROP, makeDragDrop);

            var myCont:Sprite = new Sprite();
            var Rect:Shape = new Shape();

            Rect.graphics.lineStyle(1, 0x000000); 
            Rect.graphics.beginFill(0x00FF00, 1); 
            Rect.graphics.drawRect(0, 0, 120, 120);
            myCont.addChild(Rect);

            tools_panel.addChild(uic);    
            uic.addChild(myCont);
            
            uic.addEventListener(MouseEvent.MOUSE_MOVE, dragMeObj);
        }
        
        public function dragMeObj(event:MouseEvent):void {
            var dragInitiator:UIComponent =UIComponent(event.currentTarget);
            var ds:DragSource = new DragSource();
            DragManager.doDrag(dragInitiator, ds, event, dragInitiator);
            //dragInitiator.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
            //dragInitiator.startDrag();
        }

        public function makeDragDrop(event:DragEvent):void {
            img_panel.addChild(uic);
        }

        public function makeDragEnter(event:DragEvent):void {
            var dropTarget:UIComponent = UIComponent(event.target);
            DragManager.acceptDragDrop(dropTarget);
        }
        

	]]></mx:Script>

    <mx:Panel x="0" y="10" width="423" height="467" layout="absolute" id="img_panel">
    </mx:Panel>
    <mx:Panel x="431" y="10" width="228" height="467" layout="absolute" id="tools_panel">
    </mx:Panel>
    
</mx:Application>
Ошибка возникает только в том случае, когда в
DragManager.doDrag(dragInitiator, ds, event, dragInitiator);
в качестве объекта замещения передаю dragInitiator.
Если не передаю: DragManager.doDrag(dragInitiator, ds, event); , то всё хорошо


Последний раз редактировалось etc; 24.03.2007 в 15:37.
Старый 24.03.2007, 14:07
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
easyLife, а простыню кода твоего оформлять кто будет?

Приведи код в порядок. Я покулыпаюсь и напишу.

Старый 25.03.2007, 23:40
easyLife вне форума Посмотреть профиль Отправить личное сообщение для easyLife Найти все сообщения от easyLife
  № 8  
Ответить с цитированием
easyLife

Регистрация: Mar 2007
Сообщений: 36
Быть может я неправильно поняла что значит оформлять, но одной мне это точно не победить. Хочу, чтобы во время перетаскивания объект перетаскивания был под курсором мыши и хочется, чтобы ошибки не было. Читаю доку, найти не могу в чем причина

Старый 26.03.2007, 00:40
asuri вне форума Посмотреть профиль Отправить личное сообщение для asuri Найти все сообщения от asuri
  № 9  
Ответить с цитированием
asuri

Регистрация: Oct 2006
Сообщений: 44
Посмотри. Это случайно не то, что тебе надо??
http://www.rictus.com/flex/LiveRefle...iew/index.html

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

Регистрация: Sep 2002
Сообщений: 30,787
Какой-то жесткий хак:

Код:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init();">
	<mx:Script><![CDATA[
        import flash.geom.*;
        import flash.display.*;
        import flash.events.*;
        import flash.net.*;
        import flash.errors.*;
        import mx.managers.*;
        import mx.core.DragSource;
        import mx.events.*;
        import mx.controls.Image;
        import mx.graphics.*;
        import mx.core.*;
        //part for graphics =)))
        import mx.containers.Panel;
        
        private var uic:UIComponent = new UIComponent();

        public function init():void {
            img_panel.addEventListener(DragEvent.DRAG_ENTER, makeDragEnter);

            var myCont:Sprite = new Sprite();
            var Rect:Shape = new Shape();

            Rect.graphics.lineStyle(1, 0x000000); 
            Rect.graphics.beginFill(0x00FF00, 1); 
            Rect.graphics.drawRect(0, 0, 120, 120);
            myCont.addChild(Rect);

            tools_panel.addChild(uic);    
            uic.addChild(myCont);
            
            uic.addEventListener(MouseEvent.MOUSE_MOVE, dragMeObj);
        }
        
        public function dragMeObj(event:MouseEvent):void {
            var dragInitiator:UIComponent = UIComponent(event.currentTarget);
            var ds:DragSource = new DragSource();
            DragManager.doDrag(dragInitiator, ds, event, dragInitiator);
            dragInitiator.addEventListener(DragEvent.DRAG_COMPLETE,makeDragDrop);
            //dragInitiator.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
            //dragInitiator.startDrag();
        }

        public function makeDragDrop(event:DragEvent):void {
            //       
            uic.addEventListener(Event.REMOVED,removedHandler);
        }
        
        private function removedHandler(event:Event):void {
        	//img_panel.addChild(uic);  
        	callLater(completeHandler);
        }
        
        private function completeHandler():void {
        	img_panel.addChild(uic);
        }
        
        public function makeDragEnter(event:DragEvent):void {
            var dropTarget:UIComponent = UIComponent(event.target);
            DragManager.acceptDragDrop(dropTarget);
        }
        

	]]></mx:Script>

    <mx:Panel x="0" y="10" width="423" height="467" layout="absolute" id="img_panel">
    </mx:Panel>
    <mx:Panel x="431" y="10" width="228" height="467" layout="absolute" id="tools_panel">
    </mx:Panel>
    
</mx:Application>
Я так выяснил, что DragManager не позволяет именно перемещать объекты. Потому как на endDrag у DragManagerImpl подписаться никак невозможно. А ошибка выскакивала из-за того, что в момент отпускания мыши запускался new Move(), в конце которого DragProxy вызывает endDrag, в которой происходит removeChild, которого уже нет.

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

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

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


 


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


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