2009-03-04 70 views
0

请任何人都可以指导我如何做到这一点。Flex:如何在运行时调整和移动组件?

我有一个面板和一个盒子,面板是我的组件面板(组件面板内部是图像,文本区域,视频)和 框是我的目标框为我的组件创建。用户可以选择他/她想创建的组件(动态创建) 并将其拖动到目标Box(拖放事件)。然后在创建组件 后,用户可以拖动他/她创建的组件并将其放置在目标文件夹的任何位置,并且用户还可以调整他/她创建的组件(运行时调整大小)。

我有拖放此代码,看来这个代码仅适用于图像

//-----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>; 

如何将这样的非图像部分像TxtArea?如何调整目标框中的组件大小? (这就像创建组件时的flex一样的GUI) 谢谢..

回答

0

转到http://sourceforge.net/projects/tcycomponents/
并下载包和演示,如果你想。

使用TcyReziser组件轻松移动/调整大小像德尔福2009年!

问候, 毛

+0

链接的部件是为Delphi,不针对Flex。 – 2013-01-24 15:48:49

相关问题