PNG画像を読み込んでシステムトレイアイコンに設定する
前回のAIRでシステムトレイ常駐アプリでは、システムトレイに表示するアイコンはベタ塗りのビットマップにしたが、せっかくなのでオリジナルアイコンを設定しようと思った。
LoaderとBitmapクラスを使うとできた。
前回のダイアリに載せたコードの、以下の部分
// アイコン設定 var images:Array = []; images.push(new BitmapData(16, 16, false, 0x00ff00)); NativeApplication.nativeApplication.icon.bitmaps = images;
を次のように変更(PNG画像は適宜準備してください)
// アイコン設定 var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadComplete); loader.load(new URLRequest("image/icons/blue_icon16x16.png"));
し、以下の関数を追加。
private function loadComplete(event:Event):void { var images:Array = []; var loader:Loader = Loader(event.target.loader); var bd:Bitmap = Bitmap(loader.content); images.push(bd); NativeApplication.nativeApplication.icon.bitmaps = images; }
LoaderメソッドとBitmapメソッドになぜnewをつけないのか、がよく分かっていないのでそこは要勉強だが、とりあえずこれでなんとか。
ソースコード全体
<?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="initApp()" visible="true"> <mx:Script> <![CDATA[ import mx.core.BitmapAsset; import mx.controls.Image; import mx.controls.Menu; private function initApp() : void { if (!NativeApplication.supportsSystemTrayIcon) { trace("このシステムはトレイアイコンをサポートしていません"); nativeApplication.exit(); } else { var trayIcon:SystemTrayIcon = NativeApplication.nativeApplication.icon as SystemTrayIcon; var trayMenu:NativeMenu = new NativeMenu(); trace(trayIcon.bitmaps.length); trayIcon.menu = trayMenu; var exitMenuItem:NativeMenuItem = new NativeMenuItem("終了"); exitMenuItem.addEventListener(Event.SELECT, function():void { NativeApplication.nativeApplication.exit(); } ); trayMenu.addItem(exitMenuItem); // アイコン設定 var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadComplete); loader.load(new URLRequest("image/icons/blue_icon16x16.png")); } } private function loadComplete(event:Event):void { var images:Array = []; var loader:Loader = Loader(event.target.loader); var bd:Bitmap = Bitmap(loader.content); images.push(bd); NativeApplication.nativeApplication.icon.bitmaps = images; } ]]> </mx:Script> </mx:WindowedApplication>