Flex:ランタイムでコンポーネントのサイズを変更して移動する方法
-
03-07-2019 - |
質問
どうか、誰でもこの方法を教えてくれます。
パンネルとボックスがあります。パンネルはコンポーネントパンネルです(コンポーネントパンネルの内側は、たとえば、image、TextArea、Videoです)。 Boxは、コンポーネント作成のターゲットボックスです。ユーザーは、作成するコンポーネントを選択できます(動的作成) それをターゲットBoxにドラッグします(ドラッグアンドドロップイベント)。次に、コンポーネントを作成した後 ユーザーは、作成したコンポーネントをドラッグして、ターゲットのどこにでも配置できます。 Boxおよびユーザーは、作成したコンポーネントのサイズを変更できます(実行時のサイズ変更)。
iドラッグアンドドロップ用のこのコードがあり、このコードは画像でのみ機能するようです
//-----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のようなものです) ありがとう。
解決
Rogue-Development.comのオブジェクトハンドルをチェックアウトしました。コンポーネントの移動/サイズ変更についてはかなり成功しています。
他のヒント
Pantasteライブラリも試してみてください。オブジェクトハンドル。
後藤 http://sourceforge.net/projects/tcycomponents/
必要に応じてパッケージとデモをダウンロードします。
Delphi 2009のようにTcyReziserコンポーネントを使用して簡単に移動/サイズ変更できます!
よろしく、 マウリシオ
所属していません StackOverflow