{"id":253,"date":"2011-02-01T08:22:50","date_gmt":"2011-02-01T07:22:50","guid":{"rendered":"http:\/\/www.capri-soft.de\/blog\/?p=253"},"modified":"2011-02-01T10:25:01","modified_gmt":"2011-02-01T09:25:01","slug":"adobe-flex-3-drag-and-drop-api","status":"publish","type":"post","link":"https:\/\/www.capri-soft.de\/blog\/?p=253","title":{"rendered":"Adobe Flex 3: Drag and Drop API"},"content":{"rendered":"<h1>Aufgabenstellung<\/h1>\n<p>UI-Komponenten sollen per Drag and Drop verschoben werden k\u00f6nnen. <\/p>\n<h1>Ansatz<\/h1>\n<p>Dieser Artikel beschreibt die notwendigen Flex-APIs (DragManager) f\u00fcr die Implementierung einer Drag and Drop-Funktionalit\u00e4t am Beispiel der (siehe Nachfolgeartikel) eLearning-Anwendung f\u00fcr das V-Modell. <\/p>\n<h1>L\u00f6sung<\/h1>\n<p>1.) Definition der verschiebbaren Komponenten und der Beh\u00e4lter-Komponenten.<\/p>\n<pre class=\"brush: as3; title: ; notranslate\" title=\"\">\r\n&lt;!-- WIRD VERSCHOBEN --&gt;\r\n&lt;mx:Button dragComplete=&quot;dragCompleteHandler(event);&quot; \r\nlabel=&quot;System-Entwurf&quot; id=&quot;btnSystementwurf&quot;  \/&gt;\r\n&lt;mx:Button dragComplete=&quot;dragCompleteHandler(event);&quot; \r\nlabel=&quot;Software-Entwurf&quot; id=&quot;btnSoftwareentwurf&quot;  \/&gt;\r\n..\r\n\r\n&lt;!-- WIRD HINEINGESCHOBEN --&gt;\r\n&lt;mx:HBox verticalAlign=&quot;middle&quot; verticalScrollPolicy=&quot;off&quot; \r\nhorizontalScrollPolicy=&quot;off&quot; id=&quot;dropField1&quot; \/&gt;\r\n&lt;mx:HBox verticalAlign=&quot;middle&quot; verticalScrollPolicy=&quot;off&quot; \r\nhorizontalScrollPolicy=&quot;off&quot; id=&quot;dropField2&quot; \/&gt;\r\n<\/pre>\n<p>2.) Registrierung der Eventlistener<\/p>\n<pre class=\"brush: as3; title: ; notranslate\" title=\"\">\r\n\r\n&lt;mx:Application creationComplete=&quot;{onCreationComplete()} ...\r\n\r\npublic function onCreationComplete():void\r\n{\r\n   \/\/ Registrierung des Buttons &quot;Anforderungsanalyse&quot; f\u00fcr das Verschieben in ein Feld\r\n   this.btnAnforderungsnanalyse.addEventListener( MouseEvent.MOUSE_DOWN, beginDrag );\r\n\r\n   \/\/ Registrierung des Buttons &quot;AbnahmeEntwurf&quot; f\u00fcr das Verschieben in ein Feld\r\n   this.btnAbnahmeEntwurf.addEventListener( MouseEvent.MOUSE_DOWN, beginDrag );\r\n\r\n...\r\n\r\n   \/\/ Die DropListener werden an die UI-Komponten, bzw. die Komponeten, in die \r\n   \/\/ die Objekte geschoben werden k\u00f6nnen, angeh\u00e4ngt\r\n   this.dropField1.addEventListener( DragEvent.DRAG_ENTER, acceptDrop );\r\n   this.dropField2.addEventListener( DragEvent.DRAG_ENTER, acceptDrop );\r\n   ..\r\n   this.dropField1.addEventListener( DragEvent.DRAG_DROP, handleDrop );\r\n   this.dropField2.addEventListener( DragEvent.DRAG_DROP, handleDrop );\r\n}\r\n&amp;#91;\/actionscript3&amp;#93;\r\n\r\n3.) Implementierung der Logik - Hier: \u00dcberpr\u00fcfung ob alles richtig verschoben ist\r\n&amp;#91;actionscript3&amp;#93;\r\nprivate function dragCompleteHandler(event:DragEvent):void {\r\n     var draggedButton:Button = event.dragInitiator as Button;\r\n     var dragInitCanvas:HBox = event.dragInitiator.parent as HBox;\r\n\r\n     var stimmt1:Boolean = getButtons(dropField1).indexOf(&#039;btnAnforderungsnanalyse&#039;)&gt;-1;\r\n     var stimmt2:Boolean = getButtons(dropField2).indexOf(&#039;btnSystemarchitektur&#039;)&gt;-1;\r\n               \t\r\n     if(stimmt1&amp;&amp;stimmt2) \r\n     {\r\n          Alert.show(&#039;Congratulations you did it!&#039;); \r\n     }                \t \r\n}  \r\n<\/pre>\n<p>4.) Welche Buttons sind in den Container? (Hier HBOX) <\/p>\n<p>private function getButtons(box:HBox):String<br \/>\n{<br \/>\n   var btnString:String=&#8220;;<br \/>\n   var numChildren:Number = box.numChildren;<\/p>\n<p>   for (var i:int = 0; i < numChildren; i++) \n   {\n        if(box.getChildAt(i)[\"id\"])\n        {\n           btnString=box.getChildAt(i)[\"id\"];\n        }\n    }            \t\n            \t\n     return btnString;\n}\t\t\n[\/actionscript3]\n\n5.) Management der Drag and Drop Funktionalit\u00e4t\n[actionscript3]\npublic function beginDrag( mouseEvent:MouseEvent ):void\n{\n   \/\/ the drag initiator is the object being dragged (target of the mouse event)\n   var dragInitiator:IUIComponent = mouseEvent.currentTarget as IUIComponent;\n      \n   \/\/ the drag source contains data about what's being dragged\n   var dragSource:DragSource = new DragSource();\n    \t\t\t\n    \/\/ add some information to the drag source\n   dragSource.addData( \"name\", dragInitiator.name );\n   dragSource.addData( \"parent\", dragInitiator.parent.name );\n   \n    \/\/ ask the DragManger to begin the drag\n    DragManager.doDrag( dragInitiator, dragSource, mouseEvent, null );\n}\n\npublic function handleDrop( dragEvent:DragEvent ):void\n{\n    var dragInitiator:Button = Button( dragEvent.dragInitiator );\n    var dropTarget:HBox = dragEvent.currentTarget as HBox;\n      \t\t\t      \t\t\t      \t\t\t\n    HBox(dropTarget).addChild(dragInitiator);\n}\n\npublic function acceptDrop( dragEvent:DragEvent ):void\n{\n   var dropTarget:IUIComponent = dragEvent.currentTarget as IUIComponent;\n   var dragSource:DragSource = dragEvent.dragSource;\n   \n    \/\/ accept the drop\n    DragManager.acceptDragDrop( dropTarget ); \n    \t\t\t\n    \/\/ show feedback\n    DragManager.showFeedback( DragManager.MOVE );      \t\t\t\n}\n[\/actionscript3]\n<\/p>\n<iframe src=\"http:\/\/www.facebook.com\/plugins\/like.php?href=https%3A%2F%2Fwww.capri-soft.de%2Fblog%2F%3Fp%3D253&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\" style=\"border:none; overflow:hidden; width:450px;margin-top:5px;\"><\/iframe>","protected":false},"excerpt":{"rendered":"<p>Aufgabenstellung UI-Komponenten sollen per Drag and Drop verschoben werden k\u00f6nnen. Ansatz Dieser Artikel beschreibt die notwendigen Flex-APIs (DragManager) f\u00fcr die Implementierung einer Drag and Drop-Funktionalit\u00e4t am Beispiel der (siehe Nachfolgeartikel) eLearning-Anwendung f\u00fcr das V-Modell. L\u00f6sung 1.) Definition der verschiebbaren Komponenten und der Beh\u00e4lter-Komponenten. &lt;!&#8211; WIRD VERSCHOBEN &#8211;&gt; &lt;mx:Button dragComplete=&quot;dragCompleteHandler(event);&quot; label=&quot;System-Entwurf&quot; id=&quot;btnSystementwurf&quot; \/&gt; &lt;mx:Button dragComplete=&quot;dragCompleteHandler(event);&quot; label=&quot;Software-Entwurf&quot; &hellip; <a href=\"https:\/\/www.capri-soft.de\/blog\/?p=253\" class=\"more-link\"><span class=\"screen-reader-text\">Adobe Flex 3: Drag and Drop API<\/span> weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[5],"tags":[],"class_list":["post-253","post","type-post","status-publish","format-standard","hentry","category-adobe-flex"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4yGeN-45","jetpack_likes_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/253","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=253"}],"version-history":[{"count":11,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/253\/revisions"}],"predecessor-version":[{"id":258,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/253\/revisions\/258"}],"wp:attachment":[{"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=253"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=253"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.capri-soft.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=253"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}