Apache flex Flex:如何在运行时调整和移动组件?

Apache flex Flex:如何在运行时调整和移动组件?,apache-flex,resize,move,Apache Flex,Resize,Move,拜托,任何人都可以指导我怎么做 我有一个窗格和一个框,窗格是我的组件窗格(内部组件窗格是例如图像、文本区域、视频)和 框是我创建组件的目标框。用户可以选择他/她想要创建的组件(动态创建) 并将其拖动到目标框(拖放事件)。然后在创建组件之后 用户可以拖动他/她创建的组件并将其放置在目标上的任何位置 框,用户还可以调整他/她创建的组件的大小(运行时调整大小) 我有这个拖放代码,看起来这个代码只对图像有效 //-----action script-----// private func

拜托,任何人都可以指导我怎么做

我有一个窗格和一个框,窗格是我的组件窗格(内部组件窗格是例如图像、文本区域、视频)和 框是我创建组件的目标框。用户可以选择他/她想要创建的组件(动态创建) 并将其拖动到目标框(拖放事件)。然后在创建组件之后 用户可以拖动他/她创建的组件并将其放置在目标上的任何位置 框,用户还可以调整他/她创建的组件的大小(运行时调整大小)

我有这个拖放代码,看起来这个代码只对图像有效

//-----action script-----//
        private function dragIt(event:MouseEvent, value: String, objParent: String, objName: String):void 
        {           
            var dragInitiator:Image = event.currentTarget as Image;    
            var dragSource:DragSource = new DragSource();

            dragSource.addData(value,'value');
            dragSource.addData(objParent, 'parent');
            dragSource.addData(objName, 'objname'); 

            var dragProxy:Image = new Image();
            dragProxy.source = event.currentTarget.source;


            DragManager.doDrag(dragInitiator, dragSource, event, dragProxy);
        }


        private function dragEnterHandler(event:DragEvent):void 
        {
            var dropTarget:Box=event.currentTarget as Box;
            dropTarget.setStyle("borderThickness", 5);
            DragManager.acceptDragDrop(dropTarget);
        }

        private function dragExitHandler(event:DragEvent):void
        {
            var dropTarget:Box=event.currentTarget as Box;                
            revertBoxBorder();                
        }     

        private function revertBoxBorder():void
        {
            targetBox.setStyle("borderThickness", 1);                
        }

        private function dragDropHandler(event:DragEvent):void 
        {
            var value:String = event.dragSource.dataForFormat('value') as String;
            var objParent:String = event.dragSource.dataForFormat('parent') as String;
            if(value == "mp3")
            {
             //do something     
            }
            else if (value == "image")
            {
                if (objParent == "panel")
                {
                    var imgView: Image = new Image;                 
                    imgView.x = event.stageX;
                    imgView.y = event.stageY;

                    addChild(imgView);
                    imgView.name = String(getChildByName(imgView.name).parent.numChildren-1);     
                    imgView.addEventListener(MouseEvent.MOUSE_MOVE,  function(e:MouseEvent):void 
                    {
                    dragIt(e, value, 'box', Image(e.target).name);
                });
                    imgView.source = ImgInsert;
                }
                else
                {
                    var objName:String = event.dragSource.dataForFormat('objname') as String;
                    getChildByName(objName).parent.getChildAt(int(objName)).x = event.stageX;
                    getChildByName(objName).parent.getChildAt(int(objName)).y = event.stageY;
                }

            }
            else if (value == "textarea")
            {
                //do something                  
            }

        }

//-----mxml code------//
<mx:Panel x="0" y="37" width="91" height="417" layout="absolute" title="Component" borderColor="#8DA5AB" color="#345860" borderStyle="outset">
    <mx:Image x="7" y="43" width="21" height="18" source="{TxtAreaInsert}" mouseMove="dragIt(event,'textarea','panel','')"/>
    <mx:Image x="36" y="43" width="21" height="18" source="{ImgInsert}" mouseMove="dragIt(event,'image','panel','')"/>
    <mx:Image x="36" y="80" width="21" height="18" source="{Mp3Insert}" mouseMove="dragIt(event,'mp3','panel','')"/>
    <mx:Image x="7" y="80" width="21" height="18" source="{VdoInsert}" mouseMove="dragIt(event,'video','panel','')"/>
</mx:Panel>
<mx:Box id="targetBox" y="37" width="589" height="417" borderColor="#8CC2E8" backgroundColor="#D5DBEE"
    dragExit="dragExitHandler(event)" dragEnter="dragEnterHandler(event)" dragDrop="dragDropHandler(event)" left="99">
</mx:Box>;
/----操作脚本-----//
私有函数dragIt(事件:MouseEvent,值:String,objParent:String,objName:String):void
{           
变量dragInitiator:Image=event.currentTarget作为图像;
var dragSource:dragSource=new dragSource();
addData(值,'value');
addData(objParent,'parent');
addData(objName,'objName');
var dragProxy:Image=newimage();
dragProxy.source=event.currentTarget.source;
DragManager.doDrag(dragInitiator、dragSource、event、dragProxy);
}
专用函数dragEnterHandler(事件:DragEvent):无效
{
var dropTarget:Box=event.currentTarget作为Box;
dropTarget.setStyle(“边界厚度”,5);
DragManager.acceptDragDrop(dropTarget);
}
私有函数dragExitHandler(事件:DrageEvent):void
{
var dropTarget:Box=event.currentTarget作为Box;
回复boxborder();
}     
私有函数revertBoxBorder():void
{
targetBox.setStyle(“边界厚度”,1);
}
私有函数dragDropHandler(事件:DragEvent):void
{
变量值:String=event.dragSource.dataForFormat('value')作为字符串;
var objParent:String=event.dragSource.dataForFormat('parent')作为字符串;
如果(值=“mp3”)
{
//做点什么
}
else if(值==“图像”)
{
如果(objParent==“面板”)
{
var imgView:Image=新图像;
imgView.x=event.stageX;
imgView.y=event.stageY;
addChild(imgView);
imgView.name=String(getChildByName(imgView.name).parent.numChildren-1);
imgView.addEventListener(MouseEvent.MOUSE_MOVE),函数(e:MouseEvent):void
{
dragIt(e,值,'box',图像(e.target).name);
});
imgView.source=ImgInsert;
}
其他的
{
var objName:String=event.dragSource.dataForFormat('objName')作为字符串;
getChildByName(objName).parent.getChildAt(int(objName)).x=event.stageX;
getChildByName(objName).parent.getChildAt(int(objName)).y=event.stageY;
}
}
else if(值==“textarea”)
{
//做点什么
}
}
//-----mxml代码------//
;
如何移动像TxtArea这样的非图像组件?如何调整目标框内组件的大小? (这类似于创建组件时flex的GUI) 谢谢。

检查一下,我已经用它成功地移动/调整了组件的大小。

还可以试试比对象句柄复杂得多的

转到
并下载软件包和演示,如果你想

使用TcyReziser组件可以像Delphi 2009一样轻松移动/调整大小

问候,,
Mauricio

链接的组件用于Delphi,而不是Flex。