Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Перемещение объектов в контейнере (http://www.flasher.ru/forum/showthread.php?t=194857)

ommm 23.02.2013 16:33

Перемещение объектов в контейнере
 
Здравствуйте.

Помогите советом ...

Как сделать что бы объекты не "выходили" за пределы контейнера ?

Код:


<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
                          xmlns:s="library://ns.adobe.com/flex/spark"
                          xmlns:mx="library://ns.adobe.com/flex/mx"
                          minWidth="800" minHeight="600" creationComplete="init()">
       
        <s:layout><s:VerticalLayout gap="5" paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10"/></s:layout>
       
        <fx:Script>
                <![CDATA[
                       
                        protected function init():void
                        {
                                container.addEventListener(MouseEvent.MOUSE_DOWN, dragObject);
                                container.addEventListener(MouseEvent.MOUSE_UP, dropObject);
                        }
                       
                        private function dragObject(event:MouseEvent):void
                        {
                                if (event.target.id!='container')
                                {
                                        event.target.startDrag();
                                }
                        }
                       
                        private function dropObject(event:MouseEvent):void
                        {
                                if (event.target.id!='container')
                                {
                                        event.target.stopDrag();
                                }
                        }
                       
                ]]>
        </fx:Script>

        <s:BorderContainer width="100%" height="100%">
                <s:Group id="container" width="100%" height="100%">
                        <s:BorderContainer id="box1" width="25" height="25" borderWeight="1" backgroundColor="0xс5с5с5"/>
                        <s:BorderContainer id="box2" width="25" height="25" borderWeight="1" backgroundColor="0xс5с5с5"/>
                        <s:BorderContainer id="box3" width="25" height="25" borderWeight="1" backgroundColor="0xс5с5с5"/>
                </s:Group>
        </s:BorderContainer>
       
</s:Application>


alatar 24.02.2013 19:56

Второй параметр в методе startDrag().

P.S. А зачем вы в BorderContainer еще и Group вставили?

ommm 27.02.2013 16:18

Цитата:

Сообщение от alatar (Сообщение 1122203)
Второй параметр в методе startDrag().

Ага. Спасибо! вроде бы разобрался)
Правда объекты справа и снизу за пределы уезжают при перемещении.

test_Drag_and_Drop.mxml:
Код:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
                          xmlns:s="library://ns.adobe.com/flex/spark"
                          xmlns:mx="library://ns.adobe.com/flex/mx"
                          minWidth="800" minHeight="600" creationComplete="init()">
       
        <s:layout><s:VerticalLayout gap="5" paddingBottom="100" paddingLeft="100" paddingRight="100" paddingTop="100"/></s:layout>
       
        <fx:Declarations>
                <s:ArrayCollection id="objectList_1">
                        <fx:Object objName="Объект 1"/>
                        <fx:Object objName="Объект 2"/>
                        <fx:Object objName="Объект 3"/>
                        <fx:Object objName="Объект 4"/>
                        <fx:Object objName="Объект 5"/>
                </s:ArrayCollection>
        </fx:Declarations>
       
        <fx:Script>
                <![CDATA[
                        import mx.core.IUIComponent;
                        import mx.core.IVisualElement;
                        import mx.events.DragEvent;
                        import mx.events.FlexEvent;
                        import mx.managers.DragManager;

                        protected function init():void
                        {
                                container.addEventListener(DragEvent.DRAG_COMPLETE, drag_drop_Handler);
                                container.addEventListener(DragEvent.DRAG_DROP, drag_drop_Handler);
                                container.addEventListener(DragEvent.DRAG_ENTER, drag_drop_Handler);
                                container.addEventListener(DragEvent.DRAG_EXIT, drag_drop_Handler);
                                container.addEventListener(DragEvent.DRAG_OVER, drag_drop_Handler);
                                container.addEventListener(DragEvent.DRAG_START, drag_drop_Handler);
                        }

                        private function drag_drop_Handler(event:DragEvent):void
                        {
                                var object:Object = event.currentTarget;
                               
                                switch(event.type)
                                {
                                        case DragEvent.DRAG_DROP:
                                                var new_Object:testObject = new testObject;
                                                new_Object.x = container.mouseX; 
                                                new_Object.y = container.mouseY; 
                                                new_Object.mouseChildren = false;
                                                new_Object.buttonMode = true;
                                                new_Object.addEventListener(MouseEvent.MOUSE_DOWN, drag_drop);
                                                new_Object.addEventListener(MouseEvent.MOUSE_UP, drag_drop);
                                                new_Object.addEventListener(MouseEvent.MOUSE_MOVE, drag_drop);
                                                container.addElement(new_Object);
                                                break;
                                       
                                        case DragEvent.DRAG_ENTER:
                                                DragManager.acceptDragDrop(object as IUIComponent);
                                                break;
                                }
                        }
                       
                        private function drag_drop(event:MouseEvent):void
                        {
                                var object:Object = event.currentTarget;
                               
                                switch(event.type)
                                {
                                        case MouseEvent.MOUSE_DOWN:
                                                container.setElementIndex(event.target as IVisualElement, container.numElements - 1);
                                                object.startDrag(false, new Rectangle(0, 0, container.width, container.height));
                                                object.scaleX = 1.05;
                                                object.scaleY = 1.05;
                                                break;
                                       
                                        case MouseEvent.MOUSE_UP:
                                                object.stopDrag();
                                                object.scaleX = 1.0;
                                                object.scaleY = 1.0;
                                                break;
                                }
                        }
                       
                ]]>
        </fx:Script>
       
        <s:HGroup width="100%" height="100%">
                <s:List width="150" height="100%" dataProvider="{objectList_1}" labelField="objName" dragEnabled="true" allowMultipleSelection="true"/>
                <s:BorderContainer id="container" width="100%" height="100%"/>
        </s:HGroup>
       
</s:Application>

testObject.mxml:
Код:

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
                xmlns:s="library://ns.adobe.com/flex/spark"
                xmlns:mx="library://ns.adobe.com/flex/mx" width="50" height="50">

        <s:BorderContainer borderWeight="1">
                <s:Rect left="0" right="0" top="0" bottom="0">
                        <s:fill><s:SolidColor color="0xF3F3F3"/></s:fill>
                        <s:stroke><s:SolidColorStroke weight="1"/></s:stroke>
                </s:Rect>
        </s:BorderContainer>
       
</s:Group>

Цитата:

Сообщение от alatar (Сообщение 1122203)
P.S. А зачем вы в BorderContainer еще и Group вставили?

из примера забыл убрать )


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

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