<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>イージーネット Tech Blog &#187; RIA</title>
	<atom:link href="http://blog.eni.co.jp/tech/tag/ria/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.eni.co.jp/tech</link>
	<description>株式会社イージーネットのスタッフによる技術系ブログです</description>
	<lastBuildDate>Tue, 12 Jan 2010 01:46:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/tag/ria/feed" />
		<item>
		<title>リッチなAdobe AIR/Flexのツールチップをよりリッチに</title>
		<link>http://blog.eni.co.jp/tech/2009/06/air_flex_tooltip.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/06/air_flex_tooltip.html#comments</comments>
		<pubDate>Thu, 04 Jun 2009 10:15:58 +0000</pubDate>
		<dc:creator>白石 将</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[プログラム]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=564</guid>
		<description><![CDATA[はじめまして､こんにちは｡
プロダクト&#38;サービス事業部の白石です｡
近々新バージョンのニュースリリースをおこなう予定の弊社製品easyFiLEXですが､
僕自身も開発者として本プロジェクトに参加していました｡
今回バージョンアップとなるeasyFiLEXの注目の機能として､
Adobe AIR上で動作するデスクトップアプリからファイルの送信が可能になったことが第一に挙げられます｡
そんな目玉機能の一部を任され､
初めてのデスクトップアプリ､
初めてのAdobe AIR/Flex､
さらに初めてのActionScriptと何から何まで初めてづくしの開発となりました｡
そんな初めてだらけの中で試行錯誤しつつ､
｢これは知ってると便利!!｣と思ったことを紹介しようと思います｡

カスタムツールチップの作成

今回紹介するのはAdobe AIR/Flexのツールチップについてです｡
Adobe Flex リファレンスガイドではツールヒントと呼んでいますが本記事ではツールチップと呼ぶことにします｡
ツールチップそのものをただ使うだけであれば､

1
&#60;mx:Label text=&#34;This is Label&#34; toolTip=&#34;mx.controls.Label&#34; /&#62;

のようにtoolTipプロパティを設定するだけの極々簡単なものです｡
このツールチップは設定した文字列を､
カーソルが重なった時にポップアップして表示するだけのものですが､
以下のように少し複雑なツールチップを表示することも出来ます｡

なんだか少し良い感じに見えますよね。
では､このツールチップをどうやって実装するのか説明したいと思います｡
まずはmx.core.IToolTipインターフェイスをインプリメントしたコンポーネントを作成します｡
PersonToolTip.mxml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
&#60;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?&#62;
&#60;mx:HBox xmlns:mx=&#34;http://www.adobe.com/2006/mxml&#34; width=&#34;150&#34; height=&#34;80&#34;
	alpha=&#34;.8&#34; implements=&#34;mx.core.IToolTip&#34;
	borderStyle=&#34;solid&#34; dropShadowEnabled=&#34;true&#34;
	backgroundColor=&#34;#FCFCCB&#34;&#62;
	&#60;mx:Script&#62;
		&#60;!&#91;CDATA&#91;
			import mx.controls.Text;
			&#91;Bindable&#93;
			public var person:Object;
&#160;
			public function get text&#40;&#41;:String &#123; 
				return null; 
			&#125; 
&#160;
			public function set text&#40;value:String&#41;:void &#123;
			&#125;
		&#93;&#93;&#62;
	&#60;/mx:Script&#62;	
	&#60;mx:Form paddingTop=&#34;5&#34; paddingRight=&#34;5&#34; paddingBottom=&#34;5&#34; paddingLeft=&#34;5&#34;&#62;
		&#60;mx:FormItem label=&#34;name : &#34;&#62;
			&#60;mx:Label text=&#34;{person.name}&#34; /&#62;
		&#60;/mx:FormItem&#62;
		&#60;mx:FormItem label=&#34;age : &#34;&#62;
			&#60;mx:Label text=&#34;{person.age}&#34; /&#62;
		&#60;/mx:FormItem&#62;
		&#60;mx:FormItem label=&#34;address : &#34;&#62;
			&#60;mx:Label text=&#34;{person.address}&#34; /&#62;
		&#60;/mx:FormItem&#62;
	&#60;/mx:Form&#62;
&#60;/mx:HBox&#62;

mx.core.IToolTipをインプリメントしたコンポーネントを作成したら､
そのコンポーネントを使うアプリケーションを作成します｡
Person.mxml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
&#60;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?&#62;
&#60;mx:WindowedApplication xmlns:mx=&#34;http://www.adobe.com/2006/mxml&#34; [...]]]></description>
			<content:encoded><![CDATA[<p>はじめまして､こんにちは｡<br />
プロダクト&amp;サービス事業部の白石です｡</p>
<p>近々新バージョンのニュースリリースをおこなう予定の弊社製品<a href="http://www.eni.co.jp/products/easyfilex/index.html">easyFiLEX</a>ですが､<br />
僕自身も開発者として本プロジェクトに参加していました｡</p>
<p>今回バージョンアップとなるeasyFiLEXの注目の機能として､<br />
<a href="http://www.adobe.com/jp/products/air/">Adobe AIR</a>上で動作するデスクトップアプリからファイルの送信が可能になったことが第一に挙げられます｡</p>
<p>そんな目玉機能の一部を任され､<br />
初めてのデスクトップアプリ､<br />
初めてのAdobe AIR/Flex､<br />
さらに初めてのActionScriptと何から何まで初めてづくしの開発となりました｡</p>
<p>そんな初めてだらけの中で試行錯誤しつつ､<br />
｢これは知ってると便利!!｣と思ったことを紹介しようと思います｡</p>
<p><span id="more-564"></span></p>
<h3>カスタムツールチップの作成</h3>
<p><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/06/label.png" alt="label_tooltip" title="label_tooltip" width="179" height="87" class="aligncenter size-full wp-image-568" /></p>
<p>今回紹介するのはAdobe AIR/Flexのツールチップについてです｡<br />
<a href="http://livedocs.adobe.com/flex/3_jp/langref/index.html">Adobe Flex リファレンスガイド</a>ではツールヒントと呼んでいますが本記事ではツールチップと呼ぶことにします｡</p>
<p>ツールチップそのものをただ使うだけであれば､</p>

<div class="wp_codebox"><table width="100%" ><tr id="p5645"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p564code5"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&lt;</span>mx:Label <span style="color: #0066CC;">text</span>=<span style="color: #ff0000;">&quot;This is Label&quot;</span> toolTip=<span style="color: #ff0000;">&quot;mx.controls.Label&quot;</span> <span style="color: #66cc66;">/&gt;</span></pre></td></tr></table></div>

<p>のようにtoolTipプロパティを設定するだけの極々簡単なものです｡</p>
<p>このツールチップは設定した文字列を､<br />
カーソルが重なった時にポップアップして表示するだけのものですが､<br />
以下のように少し複雑なツールチップを表示することも出来ます｡</p>
<p><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/06/person.png" alt="person" title="person" width="225" height="165" class="alignnone size-full wp-image-622" style="margin-left:5em"/><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/06/person_tooltip.png" alt="person_tooltip" title="person_tooltip" width="226" height="164" class="alignnone size-full wp-image-623" style="margin-left:5em"/></p>
<p>なんだか少し良い感じに見えますよね。</p>
<p>では､このツールチップをどうやって実装するのか説明したいと思います｡</p>
<p>まずは<a href="http://livedocs.adobe.com/flex/3_jp/langref/mx/core/IToolTip.html">mx.core.IToolTipインターフェイス</a>をインプリメントしたコンポーネントを作成します｡</p>
<p><strong>PersonToolTip.mxml</strong></p>

<div class="wp_codebox"><table width="100%" ><tr id="p5646"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
</pre></td><td class="code" id="p564code6"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&lt;</span>?<span style="color: #0066CC;">xml</span> <span style="color: #0066CC;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> encoding=<span style="color: #ff0000;">&quot;utf-8&quot;</span>?<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;</span>mx:HBox xmlns:mx=<span style="color: #ff0000;">&quot;http://www.adobe.com/2006/mxml&quot;</span> <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;150&quot;</span> <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;80&quot;</span>
	alpha=<span style="color: #ff0000;">&quot;.8&quot;</span> <span style="color: #0066CC;">implements</span>=<span style="color: #ff0000;">&quot;mx.core.IToolTip&quot;</span>
	borderStyle=<span style="color: #ff0000;">&quot;solid&quot;</span> dropShadowEnabled=<span style="color: #ff0000;">&quot;true&quot;</span>
	<span style="color: #0066CC;">backgroundColor</span>=<span style="color: #ff0000;">&quot;#FCFCCB&quot;</span><span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;</span>mx:Script<span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;!</span><span style="color: #66cc66;">&#91;</span>CDATA<span style="color: #66cc66;">&#91;</span>
			<span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">controls</span>.<span style="color: #0066CC;">Text</span>;
			<span style="color: #66cc66;">&#91;</span>Bindable<span style="color: #66cc66;">&#93;</span>
			<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> person:<span style="color: #0066CC;">Object</span>;
&nbsp;
			<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> <span style="color: #0066CC;">text</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">String</span> <span style="color: #66cc66;">&#123;</span> 
				<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">null</span>; 
			<span style="color: #66cc66;">&#125;</span> 
&nbsp;
			<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> <span style="color: #0066CC;">text</span><span style="color: #66cc66;">&#40;</span>value:<span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;/</span>mx:Script<span style="color: #66cc66;">&gt;</span>	
	<span style="color: #66cc66;">&lt;</span>mx:Form paddingTop=<span style="color: #ff0000;">&quot;5&quot;</span> paddingRight=<span style="color: #ff0000;">&quot;5&quot;</span> paddingBottom=<span style="color: #ff0000;">&quot;5&quot;</span> paddingLeft=<span style="color: #ff0000;">&quot;5&quot;</span><span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;</span>mx:FormItem label=<span style="color: #ff0000;">&quot;name : &quot;</span><span style="color: #66cc66;">&gt;</span>
			<span style="color: #66cc66;">&lt;</span>mx:Label <span style="color: #0066CC;">text</span>=<span style="color: #ff0000;">&quot;{person.name}&quot;</span> <span style="color: #66cc66;">/&gt;</span>
		<span style="color: #66cc66;">&lt;/</span>mx:FormItem<span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;</span>mx:FormItem label=<span style="color: #ff0000;">&quot;age : &quot;</span><span style="color: #66cc66;">&gt;</span>
			<span style="color: #66cc66;">&lt;</span>mx:Label <span style="color: #0066CC;">text</span>=<span style="color: #ff0000;">&quot;{person.age}&quot;</span> <span style="color: #66cc66;">/&gt;</span>
		<span style="color: #66cc66;">&lt;/</span>mx:FormItem<span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;</span>mx:FormItem label=<span style="color: #ff0000;">&quot;address : &quot;</span><span style="color: #66cc66;">&gt;</span>
			<span style="color: #66cc66;">&lt;</span>mx:Label <span style="color: #0066CC;">text</span>=<span style="color: #ff0000;">&quot;{person.address}&quot;</span> <span style="color: #66cc66;">/&gt;</span>
		<span style="color: #66cc66;">&lt;/</span>mx:FormItem<span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;/</span>mx:Form<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;/</span>mx:HBox<span style="color: #66cc66;">&gt;</span></pre></td></tr></table></div>

<p>mx.core.IToolTipをインプリメントしたコンポーネントを作成したら､<br />
そのコンポーネントを使うアプリケーションを作成します｡</p>
<p><strong>Person.mxml</strong></p>

<div class="wp_codebox"><table width="100%" ><tr id="p5647"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
</pre></td><td class="code" id="p564code7"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&lt;</span>?<span style="color: #0066CC;">xml</span> <span style="color: #0066CC;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> encoding=<span style="color: #ff0000;">&quot;utf-8&quot;</span>?<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;</span>mx:WindowedApplication xmlns:mx=<span style="color: #ff0000;">&quot;http://www.adobe.com/2006/mxml&quot;</span> layout=<span style="color: #ff0000;">&quot;absolute&quot;</span>
	<span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;300&quot;</span> <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;200&quot;</span><span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;</span>mx:Script<span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;!</span><span style="color: #66cc66;">&#91;</span>CDATA<span style="color: #66cc66;">&#91;</span>
			<span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">events</span>.<span style="color: #006600;">ToolTipEvent</span>;
&nbsp;
			<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> toolTipCreateEventHandle<span style="color: #66cc66;">&#40;</span>event:ToolTipEvent<span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">var</span> toolTip:PersonToolTip = <span style="color: #000000; font-weight: bold;">new</span> PersonToolTip<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
				toolTip.<span style="color: #006600;">person</span> = personModel;
				event.<span style="color: #006600;">toolTip</span> = toolTip;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;/</span>mx:Script<span style="color: #66cc66;">&gt;</span>
&nbsp;
	<span style="color: #66cc66;">&lt;</span>mx:Model id=<span style="color: #ff0000;">&quot;personModel&quot;</span><span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;</span>person<span style="color: #66cc66;">&gt;</span>
			<span style="color: #66cc66;">&lt;</span>name<span style="color: #66cc66;">&gt;</span>taro<span style="color: #66cc66;">&lt;/</span>name<span style="color: #66cc66;">&gt;</span>
			<span style="color: #66cc66;">&lt;</span>age<span style="color: #66cc66;">&gt;</span><span style="color: #cc66cc;">20</span><span style="color: #66cc66;">&lt;/</span>age<span style="color: #66cc66;">&gt;</span>
			<span style="color: #66cc66;">&lt;</span>address<span style="color: #66cc66;">&gt;</span>Osaka<span style="color: #66cc66;">&lt;/</span>address<span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;/</span>person<span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;/</span>mx:Model<span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;</span>mx:Panel title=<span style="color: #ff0000;">&quot;Person&quot;</span> <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;75%&quot;</span> <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;75%&quot;</span> paddingTop=<span style="color: #ff0000;">&quot;10&quot;</span> paddingLeft=<span style="color: #ff0000;">&quot;10&quot;</span><span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;</span>mx:Label <span style="color: #0066CC;">text</span>=<span style="color: #ff0000;">&quot;{personModel.name}&quot;</span>
			toolTip=<span style="color: #ff0000;">&quot; &quot;</span> toolTipCreate=<span style="color: #ff0000;">&quot;toolTipCreateEventHandle(event)&quot;</span> <span style="color: #66cc66;">/&gt;</span>
	<span style="color: #66cc66;">&lt;/</span>mx:Panel<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;/</span>mx:WindowedApplication<span style="color: #66cc66;">&gt;</span></pre></td></tr></table></div>

<p>この二つのファイルを作成したら後は実行するだけです｡</p>
<p>どうでしたか?<br />
凄く簡単でしたよね?</p>
<p>簡単に動作を説明すると､</p>
<ol>
<li>taroにカーソルを合わせる</li>
<li>toolTipプロパティで設定した&quot; &quot;という文字列でツールチップを作成</li>
<li>ツールチップが作成される際に投げられる<a href="http://livedocs.adobe.com/flex/3_jp/langref/mx/core/UIComponent.html#event:toolTipCreate">toolTipCreateイベント</a>処理開始</li>
<li>イベントにPersonToolTipコンポーネントを渡す</li>
<li>カスタムツールチップ表示</li>
</ol>
<p>といった具合に処理されています｡</p>
<p>toolTipプロパティに&quot;&quot;ではなくて､&quot; &quot;(空白文字)を渡している点に注意してください｡</p>
<p>toolTipプロパティが&quot;&quot;では､空文字となるためツールチップが作成されません｡<br />
つまり､toolTipCreateイベントが投げられないのでカスタムツールチップに差し替えることが出来ないのです｡<br />
逆に言ってしまえばtoolTipCreateイベントが投げられれば良いので､&quot;hoge&quot;でも&quot;foo&quot;でも&quot;bar&quot;でも構いません｡</p>
<p>ところで､toolTipCreateイベントの処理の中で<br />
イベント自身である<a href="http://livedocs.adobe.com/flex/3_jp/langref/mx/events/ToolTipEvent.html">mx.events.ToolTipEventクラス</a>のtoolTipプロパティにPersonToolTipコンポーネントを渡すだけでツールチップが差し替えられるのは何故なのでしょうか?</p>
<p><a href="http://livedocs.adobe.com/flex/3_jp/langref/mx/core/UIComponent.html#event:toolTipCreate">mx.core.UIComponentクラス のtoolTipCreateイベントのリファレンスガイド</a>には以下のように書いてあります｡</p>
<blockquote><p>独自の IToolTip オブジェクトを作成し、それに対する参照をイベントオブジェクトの toolTip プロパティに格納し、これを toolTipCreate ハンドラに渡すと、ToolTipManager によってそのカスタムツールヒントが表示されます。 </p></blockquote>
<p>上記の機能を利用してツールチップをカスタムツールチップに差し替えているわけです｡</p>
<h3>ComboBoxとカスタムツールチップを組み合わせてみる</h3>
<p>このカスタムツールチップは何かと使えそうなので､<br />
<a href="http://livedocs.adobe.com/flex/3_jp/langref/mx/controls/ComboBox.html">mx.controls.ComboBoxコントロール</a>にこのカスタムツールチップを使用する方法を考えてみました｡</p>

<div class="wp_codebox"><table width="100%" ><tr id="p5648"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
</pre></td><td class="code" id="p564code8"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&lt;</span>?<span style="color: #0066CC;">xml</span> <span style="color: #0066CC;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> encoding=<span style="color: #ff0000;">&quot;utf-8&quot;</span>?<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;</span>mx:WindowedApplication xmlns:mx=<span style="color: #ff0000;">&quot;http://www.adobe.com/2006/mxml&quot;</span> layout=<span style="color: #ff0000;">&quot;absolute&quot;</span>
	<span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;300&quot;</span> <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;200&quot;</span> creationComplete=<span style="color: #ff0000;">&quot;init()&quot;</span><span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;</span>mx:Script<span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;!</span><span style="color: #66cc66;">&#91;</span>CDATA<span style="color: #66cc66;">&#91;</span>
			<span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">collections</span>.<span style="color: #006600;">ArrayCollection</span>;
			<span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">events</span>.<span style="color: #006600;">ToolTipEvent</span>;
&nbsp;
			<span style="color: #66cc66;">&#91;</span>Bindable<span style="color: #66cc66;">&#93;</span>
			<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> persons:ArrayCollection = <span style="color: #000000; font-weight: bold;">new</span> ArrayCollection<span style="color: #66cc66;">&#40;</span>
				<span style="color: #66cc66;">&#91;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">name</span>:<span style="color: #ff0000;">&quot;taro&quot;</span>, age:<span style="color: #cc66cc;">20</span>, address:<span style="color: #ff0000;">&quot;Osaka&quot;</span><span style="color: #66cc66;">&#125;</span>,
				  <span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">name</span>:<span style="color: #ff0000;">&quot;hanako&quot;</span>, age:<span style="color: #cc66cc;">18</span>, address:<span style="color: #ff0000;">&quot;Tokyo&quot;</span><span style="color: #66cc66;">&#125;</span>,
				  <span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">name</span>:<span style="color: #ff0000;">&quot;ichiro&quot;</span>, age:<span style="color: #cc66cc;">24</span>, address:<span style="color: #ff0000;">&quot;Hukuoka&quot;</span><span style="color: #66cc66;">&#125;</span>
				<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> toolTipCreateEventHandle<span style="color: #66cc66;">&#40;</span>event:ToolTipEvent<span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">var</span> toolTip:PersonToolTip = <span style="color: #000000; font-weight: bold;">new</span> PersonToolTip<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
				toolTip.<span style="color: #006600;">person</span> = personsComboBox.<span style="color: #006600;">selectedItem</span>;
				event.<span style="color: #006600;">toolTip</span> = toolTip;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;/</span>mx:Script<span style="color: #66cc66;">&gt;</span>
&nbsp;
	<span style="color: #66cc66;">&lt;</span>mx:Panel title=<span style="color: #ff0000;">&quot;Persons&quot;</span> <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;75%&quot;</span> <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;75%&quot;</span> paddingTop=<span style="color: #ff0000;">&quot;10&quot;</span> paddingLeft=<span style="color: #ff0000;">&quot;10&quot;</span><span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;</span>mx:ComboBox id=<span style="color: #ff0000;">&quot;personsComboBox&quot;</span> dataProvider=<span style="color: #ff0000;">&quot;{persons}&quot;</span> labelField=<span style="color: #ff0000;">&quot;name&quot;</span>
			toolTip=<span style="color: #ff0000;">&quot; &quot;</span> toolTipCreate=<span style="color: #ff0000;">&quot;toolTipCreateEventHandle(event)&quot;</span> <span style="color: #66cc66;">/&gt;</span>
	<span style="color: #66cc66;">&lt;/</span>mx:Panel<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;/</span>mx:WindowedApplication<span style="color: #66cc66;">&gt;</span></pre></td></tr></table></div>

<p>ただ､これだとComboBox自身のツールチップは表示されるのですが､<br />
ドロップダウンリストでのツールチップが有効にならないのでイマイチ使い勝手はよくありません｡</p>
<p><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/06/combobox_tooltip.png" alt="combobox_tooltip" title="combobox_tooltip" width="226" height="164" class="alignnone size-full wp-image-624" style="margin-left:5em"/><img src="http://blog.eni.co.jp/tech/wp-content/uploads/2009/06/dropdown.png" alt="dropdown" title="dropdown" width="225" height="164" class="alignnone size-full wp-image-625" style="margin-left:5em"/></p>
<p>どうにか実現出来ないかと､</p>
<ul>
<li><a href="http://livedocs.adobe.com/flex/3_jp/langref/mx/controls/listClasses/ListBase.html#showDataTips">dropdown.showDataTipsプロパティ</a>にtrueを設定</li>
<li><a href="http://livedocs.adobe.com/flex/3_jp/langref/mx/controls/List.html">List</a>を継承しイベントリスナーに<a href="http://livedocs.adobe.com/flex/3_jp/langref/mx/events/ToolTipEvent.html#TOOL_TIP_CREATE">ToolTipEvent.TOOL_TIP_CREATEイベント</a>を追加したクラスを作成して<a href="http://livedocs.adobe.com/flex/3_jp/langref/mx/controls/ComboBox.html#dropdownFactory">dropdownFactoryプロパティ</a>に設定</li>
<li><a href="http://livedocs.adobe.com/flex/3_jp/langref/mx/controls/ComboBox.html#event:itemRollOver">ItemRollOver</a>､<a href="http://livedocs.adobe.com/flex/3_jp/langref/mx/controls/ComboBox.html#event:itemRollOut">ItemRollOut</a>イベントを駆使</li>
</ul>
<p>と色々と試行錯誤してみたのですが､どれも上手くいってません｡<br />
上手く実現出来た方がいれば是非教えてください｡</p>
<p><a href="http://livedocs.adobe.com/flex/3_jp/langref/mx/managers/ToolTipManager.html">ToolTipManagerクラス</a>にIToolTipインターフェイスの実装クラスを渡したら､<br />
そのままツールチップとして表示してくれるメソッドが用意されていれば簡単だったのですが･･･</p>
<h3>まとめ</h3>
<p>結局､ComboBoxとの夢の共演は果たせなかったのですが､<br />
このカスタムツールチップは色々な所で使える便利な機能だと思います。</p>
<p>最初から便利なコンポーネントが用意されているAIR/Flex環境ですが､<br />
少しだけ工夫をすることで更に便利なものにすることが出来てしまいます。</p>
<p>今回は紹介出来ませんでしたが､<br />
まだ他にもちょっとしたTipsのような形で紹介出来そうなことも発見しました｡</p>
<p>また次の機会にでも､<br />
ちょっとした工夫を紹介出来たらと思います｡</p>
<h3>使用したソフトウェア</h3>
<table class="content">
<tr>
<th></th>
<th>バージョン</th>
</tr>
<tr>
<th>Adobe AIR</th>
<td>1.5</td>
</tr>
<tr>
<th>Adobe Flex SDK</th>
<td>3.2.0</td>
</tr>
</table>
<h3>参考ドキュメント</h3>
<ul>
<li>
        <a href="http://www.adobe.com/livedocs/flex/3_jp/html/help.html?content=tooltips_4.html">Flex 3 開発ガイド  ツールヒントマネージャの使用</a>
    </li>
<li>
        <a href="http://wiki.mediaboxtraining.com/doku.php/tutorials:flex:tooltip">Personalise your information bubbles (ToolTip)</a>
    </li>
</ul>
<h3>あわせて読みたい</h3>
<ul>
<li><a href="http://blog.eni.co.jp/tech/2009/06/air_flex_upload.html">AIR/Flex でファイルアップロード</a></li>
<li><a href="http://blog.eni.co.jp/tech/2009/05/air_flex_draganddrop.html">AIR/Flex でドラッグ アンド ドロップ</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/06/air_flex_tooltip.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/06/air_flex_tooltip.html" />
	</item>
		<item>
		<title>AIR/Flex でドラッグ アンド ドロップ</title>
		<link>http://blog.eni.co.jp/tech/2009/05/air_flex_draganddrop.html</link>
		<comments>http://blog.eni.co.jp/tech/2009/05/air_flex_draganddrop.html#comments</comments>
		<pubDate>Mon, 18 May 2009 08:00:46 +0000</pubDate>
		<dc:creator>末田 佳和</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[プログラム]]></category>
		<category><![CDATA[drag]]></category>
		<category><![CDATA[drop]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://blog.eni.co.jp/tech/?p=86</guid>
		<description><![CDATA[こんにちは。
プロダクト&#38;サービス事業部 リーダーの末田です。
初めての本格的な投稿なのですが、
今回はAdobe AIR/Flexでのドラッグ アンド ドロップについて書こうと思います。
弊社製品にeasyFiLEXというものがあるのですが、
そこで、ドラッグ アンド ドロップがしたいんだ！ という強い要望があり、
Adobe AIR/Flexの技術を利用して実現しました。
いまどきだと、Ajaxでも実現できるのですが、今回はFlexを採用しました。
AIRとFlexそしてブラウザの関係ですが、AIRはローカルマシン上の環境、
FlexはAIR上、もしくはWebブラウザ上のFlash Player(Plugin)で動作します。
Webブラウザ上  →　Flex
AIR          　→　Flex
AIRの上ではFlexではない、通常のHTMLとJavaScriptでも動作します。
Flexを利用すると、Webブラウザ上でもローカルマシン上のAIRでも、
同じ技術でリッチなインタフェースを実現でき、
さらに、最初からドラッグ アンド ドロップがサポートされています。
Flexでは、Flexコンポーネント間のドラッグ アンド ドロップが簡単に実現できます。
しかしeasyFiLEXは、ローカルマシン上にあるファイルをWebアプリであるeasyFiLEXにアップロードして、
他の人とファイルをやり取りする仕組みのアプリケーションです。
ですので、実現したかったのは、ローカルマシンにある(例えばデスクトップにある)ファイルを
ドラッグしてブラウザ上に持って行き、ドロップすると、そのファイルがアップロードされる、
という操作を実現したかったのです。

しかし、ブラウザ上のFlexでは、コンポーネント間のドラッグアンドドロップは簡単にできますが、
ローカルマシン上のオブジェクトからFlexコンポーネント、または逆、といった環境の場合実現できないことがわかりました。
（もしできるのであればぜひ教えてください！ ActiveXであれば実現できるようです）

ブラウザ上のFlexでのドラッグアンドドロップ動作関係



Flexコンポーネント
ローカルマシン上のオブジェクト


Flexコンポーネント
○
×


ローカルマシン上のオブジェクト
×
-



そこで、AIRの出番です。
ブラウザ上のFlexでは(おそらく)セキュリティ上の関係で、
ローカルマシン上にあるファイルにはアクセスできない仕様になっていると思われますが、
AIRはローカルマシンにインストールして利用するため、この制限がゆるくなっています。
なので、AIR上のFlexでは、Flexコンポーネントとローカルマシン上のオブジェクトの間でドラッグアンドドロップが可能です。

AIR上のFlexでのドラッグアンドドロップ動作関係



Flexコンポーネント
ローカルマシン上のオブジェクト


Flexコンポーネント
○
○


ローカルマシン上のオブジェクト
○
-



せっかくなので、ドラッグ アンド ドロップを実現するコードを紹介したいと思います。
※対象バージョン/環境
Adobe AIR 1.5.1 SDK
Adobe Flex 3.3.0 SDK
コード全体

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
&#60;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?&#62;
&#60;mx:WindowedApplication xmlns:mx=&#34;http://www.adobe.com/2006/mxml&#34; layout=&#34;absolute&#34;
  applicationComplete=&#34;init()&#34;&#62;
  &#60;mx:Script&#62;
    &#60;!&#91;CDATA&#91;
&#160;
    private function init &#40;&#41; : [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは。<br />
プロダクト&amp;サービス事業部 リーダーの末田です。</p>
<p>初めての本格的な投稿なのですが、<br />
今回はAdobe AIR/Flexでのドラッグ アンド ドロップについて書こうと思います。</p>
<p>弊社製品に<a href="http://www.eni.co.jp/products/easyfilex/index.html">easyFiLEX</a>というものがあるのですが、<br />
そこで、ドラッグ アンド ドロップがしたいんだ！ という強い要望があり、<br />
Adobe AIR/Flexの技術を利用して実現しました。<br />
いまどきだと、Ajaxでも実現できるのですが、今回はFlexを採用しました。</p>
<p>AIRとFlexそしてブラウザの関係ですが、AIRはローカルマシン上の環境、<br />
FlexはAIR上、もしくはWebブラウザ上のFlash Player(Plugin)で動作します。</p>
<p>Webブラウザ上  →　Flex<br />
AIR          　→　Flex</p>
<p>AIRの上ではFlexではない、通常のHTMLとJavaScriptでも動作します。<br />
Flexを利用すると、Webブラウザ上でもローカルマシン上のAIRでも、<br />
同じ技術でリッチなインタフェースを実現でき、<br />
さらに、最初からドラッグ アンド ドロップがサポートされています。</p>
<p>Flexでは、Flexコンポーネント間のドラッグ アンド ドロップが簡単に実現できます。<br />
しかしeasyFiLEXは、ローカルマシン上にあるファイルをWebアプリであるeasyFiLEXにアップロードして、<br />
他の人とファイルをやり取りする仕組みのアプリケーションです。<br />
ですので、実現したかったのは、ローカルマシンにある(例えばデスクトップにある)ファイルを<br />
ドラッグしてブラウザ上に持って行き、ドロップすると、そのファイルがアップロードされる、<br />
という操作を実現したかったのです。</p>
<p><span id="more-86"></span></p>
<p>しかし、ブラウザ上のFlexでは、コンポーネント間のドラッグアンドドロップは簡単にできますが、<br />
ローカルマシン上のオブジェクトからFlexコンポーネント、または逆、といった環境の場合実現できないことがわかりました。<br />
（もしできるのであればぜひ教えてください！ ActiveXであれば実現できるようです）</p>
<table class="content" border="0">
<caption>ブラウザ上のFlexでのドラッグアンドドロップ動作関係</caption>
<tbody>
<tr>
<th></th>
<th>Flexコンポーネント</th>
<th>ローカルマシン上のオブジェクト</th>
</tr>
<tr>
<th>Flexコンポーネント</th>
<td class="center">○</td>
<td class="center">×</td>
</tr>
<tr>
<th>ローカルマシン上のオブジェクト</th>
<td class="center">×</td>
<td class="center">-</td>
</tr>
</tbody>
</table>
<p>そこで、AIRの出番です。<br />
ブラウザ上のFlexでは(おそらく)セキュリティ上の関係で、<br />
ローカルマシン上にあるファイルにはアクセスできない仕様になっていると思われますが、<br />
AIRはローカルマシンにインストールして利用するため、この制限がゆるくなっています。<br />
なので、AIR上のFlexでは、Flexコンポーネントとローカルマシン上のオブジェクトの間でドラッグアンドドロップが可能です。</p>
<table class="content" border="0">
<caption>AIR上のFlexでのドラッグアンドドロップ動作関係</caption>
<tbody>
<tr>
<th></th>
<th>Flexコンポーネント</th>
<th>ローカルマシン上のオブジェクト</th>
</tr>
<tr>
<th>Flexコンポーネント</th>
<td class="center">○</td>
<td class="center">○</td>
</tr>
<tr>
<th>ローカルマシン上のオブジェクト</th>
<td class="center">○</td>
<td class="center">-</td>
</tr>
</tbody>
</table>
<p>せっかくなので、ドラッグ アンド ドロップを実現するコードを紹介したいと思います。</p>
<p>※対象バージョン/環境<br />
Adobe AIR 1.5.1 SDK<br />
Adobe Flex 3.3.0 SDK</p>
<h3>コード全体</h3>

<div class="wp_codebox"><table width="100%" ><tr id="p8613"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
</pre></td><td class="code" id="p86code13"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&lt;</span>?<span style="color: #0066CC;">xml</span> <span style="color: #0066CC;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> encoding=<span style="color: #ff0000;">&quot;utf-8&quot;</span>?<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;</span>mx:WindowedApplication xmlns:mx=<span style="color: #ff0000;">&quot;http://www.adobe.com/2006/mxml&quot;</span> layout=<span style="color: #ff0000;">&quot;absolute&quot;</span>
  applicationComplete=<span style="color: #ff0000;">&quot;init()&quot;</span><span style="color: #66cc66;">&gt;</span>
  <span style="color: #66cc66;">&lt;</span>mx:Script<span style="color: #66cc66;">&gt;</span>
    <span style="color: #66cc66;">&lt;!</span><span style="color: #66cc66;">&#91;</span>CDATA<span style="color: #66cc66;">&#91;</span>
&nbsp;
    <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> init <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
      <span style="color: #0066CC;">this</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">NativeDragEvent</span>.<span style="color: #006600;">NATIVE_DRAG_ENTER</span>, onDragEnter<span style="color: #66cc66;">&#41;</span>;
      <span style="color: #0066CC;">this</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">NativeDragEvent</span>.<span style="color: #006600;">NATIVE_DRAG_DROP</span>, onDragDrop<span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> onDragEnter <span style="color: #66cc66;">&#40;</span>event:flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">NativeDragEvent</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
      <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>event.<span style="color: #0066CC;">target</span> is InteractiveObject<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        flash.<span style="color: #006600;">desktop</span>.<span style="color: #006600;">NativeDragManager</span>.<span style="color: #006600;">acceptDragDrop</span><span style="color: #66cc66;">&#40;</span>InteractiveObject<span style="color: #66cc66;">&#40;</span>event.<span style="color: #0066CC;">target</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
      <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> onDragDrop <span style="color: #66cc66;">&#40;</span>event:flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">NativeDragEvent</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
      <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">clipboard</span>.<span style="color: #006600;">hasFormat</span><span style="color: #66cc66;">&#40;</span>ClipboardFormats.<span style="color: #006600;">FILE_LIST_FORMAT</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">list</span>:<span style="color: #0066CC;">Array</span> = event.<span style="color: #006600;">clipboard</span>.<span style="color: #006600;">getData</span><span style="color: #66cc66;">&#40;</span>ClipboardFormats.<span style="color: #006600;">FILE_LIST_FORMAT</span><span style="color: #66cc66;">&#41;</span> as <span style="color: #0066CC;">Array</span>;
        <span style="color: #b1b100;">for</span> <span style="color: #b1b100;">each</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> file:flash.<span style="color: #006600;">filesystem</span>.<span style="color: #006600;">File</span> <span style="color: #b1b100;">in</span> <span style="color: #0066CC;">list</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
          <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>file.<span style="color: #006600;">nativePath</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #66cc66;">&#125;</span>
      <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&gt;</span>
  <span style="color: #66cc66;">&lt;/</span>mx:Script<span style="color: #66cc66;">&gt;</span>
  <span style="color: #66cc66;">&lt;</span>mx:Panel <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> layout=<span style="color: #ff0000;">&quot;absolute&quot;</span><span style="color: #66cc66;">&gt;</span>
  <span style="color: #66cc66;">&lt;/</span>mx:Panel<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;/</span>mx:WindowedApplication<span style="color: #66cc66;">&gt;</span></pre></td></tr></table></div>

<h3>イベントリスナーの設定</h3>

<div class="wp_codebox"><table width="100%" ><tr id="p8614"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p86code14"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">this</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">NativeDragEvent</span>.<span style="color: #006600;">NATIVE_DRAG_ENTER</span>, onDragEnter<span style="color: #66cc66;">&#41;</span>;
<span style="color: #0066CC;">this</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">NativeDragEvent</span>.<span style="color: #006600;">NATIVE_DRAG_DROP</span>, onDragDrop<span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>まず、2つのイベントリスナーを設定します。<br />
flash.events.NativeDragEvent.NATIVE_DRAG_ENTER が、ドラッグしてきてオブジェクトの境界内に入った時<br />
flash.events.NativeDragEvent.NATIVE_DRAG_DROP が、ドラッグしてきたアイテムをオブジェクトの上で離した時<br />
の2つです。<br />
AIR上とWeb上でまず違うのがここです。<br />
そもそも、flash.events.NativeDragEventのイベントがAIRでしか発生しません。</p>
<p>私はここではまりました。<br />
私はFlex Builderを使っているのですが、Flex Builderのデバッグモードで動作させた場合、<br />
このイベントが発生しません。<br />
一度リリースビルドを行い、インストールするとイベントが発生しました。</p>
<h3>flash.events.NativeDragEvent.NATIVE_DRAG_ENTERイベント</h3>
<p>このイベントは、ドラッグしてきてオブジェクトの境界内に入った時に発生します。<br />
この際、ドラッグしてきてOKです、とシステムに知らさなければいけません。</p>

<div class="wp_codebox"><table width="100%" ><tr id="p8615"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p86code15"><pre class="actionscript" style="font-family:monospace;">flash.<span style="color: #006600;">desktop</span>.<span style="color: #006600;">NativeDragManager</span>.<span style="color: #006600;">acceptDragDrop</span><span style="color: #66cc66;">&#40;</span>obj:InteractiveObject<span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>を呼ぶことにより、ドラッグを受け付けることになります。<br />
このメソッドを呼ぶと、マウスポインタが「＋」マークのついたポインタに変わります。</p>
<h3>flash.events.NativeDragEvent.NATIVE_DRAG_DROPイベント</h3>
<p>このイベントは、実際にドロップされたときに発生します。<br />
先の、NativeDragManager.acceptDragDrop()が事前に呼ばれていないと発生しません。</p>
<p>ドロップされたオブジェクトは、</p>

<div class="wp_codebox"><table width="100%" ><tr id="p8616"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p86code16"><pre class="actionscript" style="font-family:monospace;">flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">NativeDragEvent</span>.<span style="color: #006600;">clipboard</span>.<span style="color: #006600;">getData</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>で取得できます。<br />
そのオブジェクトは、flash.desktop.Clipboardというクラスを経由して様々な情報を取得できます。<br />
今回は、ローカルのファイル情報を取得しましたが、テキストデータやイメージデータ等も取得できます。</p>
<p>以上が、AIR/FlexでFlexコンポーネントとローカルマシン上のオブジェクトの間のドラッグ アンド ドロップを実現する方法です。<br />
詳細はAIR/Flexのドキュメントにも詳しく書かれていますが、もひとつわかりにくい気もします。</p>
<p>それでは！</p>
<h3>あわせて読みたい</h3>
<ul>
<li><a href="http://blog.eni.co.jp/tech/2009/06/air_flex_upload.html">AIR/Flex でファイルアップロード</a></li>
<li><a href="http://blog.eni.co.jp/tech/2009/06/air_flex_tooltip.html">リッチなAdobe AIR/Flexのツールチップをよりリッチに</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.eni.co.jp/tech/2009/05/air_flex_draganddrop.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.eni.co.jp/tech/2009/05/air_flex_draganddrop.html" />
	</item>
	</channel>
</rss>
