2009年6月3日水曜日

AIRでタスクバーに表示されないアプリケーションを作る


ウィジェットをAIRで作ってみたくなった。

ウィジェットがタスクバーに表示されていたら邪魔だから、タスクバーに表示されないようにしたい。
そのためにはウィンドウのtypeをlightweightにすればよい。

  1. ベースを<mx:Window>にしたカスタムコンポーネントを作りtype="lightweight"にする。
  2. (1)が閉じられたらアプリケーションを終了させるコードを書く
  3. アプリケーションファイルを<mx:Application>にして(1)を表示する

ウィンドウの位置を動かすためにnativeWindow.startMove()をmouseDownイベントのハンドラで呼び出す。このときmouseDownをカスタムコンポーネントで拾うと、イベントバブリングがあるので、全ての子コンポーネントのmouseDownを拾ってしまう。解決方法は、イベントバブリングを中断するという方法もあるのだろうけれど(...調べてないからやり方は分からない)、mouseDownを受け取るコンポーネントを配置する方法のほうが簡単だと思う(...知識は少なくても解決できたから^^)。

ちなみに、<mx:Application>を使う理由は、Flex Builder 3でAIRアプリのプロジェクトを作ると、アプリケーションファイルは<mx:WindowedApplication>になるのだが、このときウィンドウのtypeをlightweightにする方法を見つけられなかったから。

WidgetWindow.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Window xmlns:mx="http://www.adobe.com/2006/mxml"
maximizable="false"
minimizable="false"
resizable="false"
systemChrome="none"
showFlexChrome="false"
transparent="true"
type="lightweight"
layout="absolute"
width="100"
height="100"
close="exit()">
<mx:Script>
<![CDATA[
private function exit():void
{
NativeApplication.nativeApplication.exit(0);
}
]]>
</mx:Script>
<mx:Canvas width="100%" height="100%"
cornerRadius="8" borderStyle="solid" backgroundColor="#F3F3D1"
mouseDown="nativeWindow.startMove()" backgroundAlpha="0.7"/>
<mx:VBox horizontalCenter="0" verticalCenter="0" horizontalAlign="center">
<mx:Label text="Hello world"/>
<mx:Button label="close" click="exit()"/>
</mx:VBox>
</mx:Window>

Widget.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
initialize="init()">
<mx:Script>
<![CDATA[
private function init():void
{
new WidgetWindow().open();
}
]]>
</mx:Script>
</mx:Application>

0 件のコメント:

コメントを投稿