トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     AIRでタスクトレイなどにアイコンを表示
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
宇都宮正宗
Åê¹ÆNo.39161
投稿日時: 2008-6-12 0:11
新米
居住地:
投稿: 25
使用環境:
:Flash:5
6.0
2004
:Flash:8
:Flash:CS3
:Flash:CS4
:Flash:CS5
:Flash:CS6
:FlashCC
:FlashBuilder
:FlashDevelop
pro
:Win:Vista
:Win:7
:MacOS:X
AIRでタスクトレイなどにアイコンを表示
こんにちは。正宗と申します。
AIRに限定するAS3の話題もこちらでよろしいでしょうか?

DockやタスクトレイにAIRアプリで設定したアイコンを表示させたいのですが
さんざん迷って出来たのが以下のコードになります。

いちおう目的の動作はするんですが、
コードを見ていただくとわかるように、何というか…こう…非常にださいのです…



アプリケーションインストールフォルダにIcon/ds_128.pngといったアイコン画像が格納されているとして

import flash.filesystem.*;
import flash.display.BitmapData;
import flash.display.Loader;
//タスクトレイアイコン
var images:Array = [];
if (NativeApplication.supportsDockIcon) {
	var icon128:File = File.applicationDirectory.resolvePath(File.applicationDirectory.nativePath + "/Icons/ds_128.png");
	var ldr128:Loader = new Loader();
	ldr128.contentLoaderInfo.addEventListener(Event.COMPLETE, on128Loaded);
	ldr128.load(new URLRequest(icon128.url));
	function on128Loaded(event:Event):void {
		var bit128:BitmapData = new BitmapData(128,128);
		bit128.draw(ldr128);
		images.push(bit128);
		NativeApplication.nativeApplication.icon.bitmaps = images;
	}
} else if (NativeApplication.supportsSystemTrayIcon) {
	var icon16:File = File.applicationDirectory.resolvePath(File.applicationDirectory.nativePath + "/Icons/ds_16.png");
	var ldr16:Loader = new Loader();
	ldr16.contentLoaderInfo.addEventListener(Event.COMPLETE, on16Loaded);
	ldr16.load(new URLRequest(icon16.url));
	function on16Loaded(event:Event):void {
		var bit16:BitmapData = new BitmapData(16,16);
		bit16.draw(ldr16);
		images.push(bit16);
		NativeApplication.nativeApplication.icon.bitmaps = images;
	}
}



場当たり的に変数増やしてるのもそうなんですが、
特にLoader使ってEvent.COMPLETEを待ってBitmapDataにdrawしてるとこらとか
リソースを無駄に使ってる気がして、「ああ、俺、贅沢してるなあ」と逆に優越感にひたれてしまうくらい
無駄が多いような気がします(^^;)ゞ。

そこで、お手すきな方いましたら、是非とももうちょっとスマートな方法を共有させて頂きたいのですm(_ _)m。
何をもってスマートといえるかどうかは、おひとりおひとりで違うと思いますし、問題解決を望むわけではないので、
「オレの見つけたもっと良い方法はこうだよ!」的なコードがありましたら、どうぞご教授下さい。



いちおう当方の環境は
WindowsVista、FlashCS3です。
AIRは日本語通ってるんでたぶん1.1。もしかしたら1.0かもしれないです。





あとこれは相当な蛇足ですが、AIRアプリのタスクトレイにツールチップでアプリ名を表示させるコード。
これは結構自信ありますんで、よかったら参考にしてやって下さい
特に上3行は書いておくとアプリケーションXMLを簡単に読めるようになるんで、ちょっとしたことですが何かと便利かも!?

var appXml:XML = new XML(NativeApplication.nativeApplication.applicationDescriptor);
var ns:Namespace = new Namespace("http://ns.adobe.com/air/application/1.0");
default xml namespace = ns;

var icon:SystemTrayIcon = NativeApplication.nativeApplication.icon as SystemTrayIcon;
try {
	icon.tooltip = appXml.name;
} catch (err:Error) {
}
宇都宮正宗
Åê¹ÆNo.39206
投稿日時: 2008-6-19 2:14
新米
居住地:
投稿: 25
使用環境:
:Flash:5
6.0
2004
:Flash:8
:Flash:CS3
:Flash:CS4
:Flash:CS5
:Flash:CS6
:FlashCC
:FlashBuilder
:FlashDevelop
pro
:Win:Vista
:Win:7
:MacOS:X
Re: AIRでタスクトレイなどにアイコンを表示
いや?ほんとどうでもいい話題で申し訳ないです(^^;)ゞ
自分なりにお掃除してみた結果


//タスクトレイアイコン
function setTaskIcon(n:uint) :void{
	var images:Array = [];
	var icon:File = File.applicationDirectory.resolvePath(File.applicationDirectory.nativePath + "/Icons/icon_"+String(n)+".png");
	var ldr:Loader = new Loader();
	ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
	ldr.load(new URLRequest(icon.url));
	function onLoaded(event:Event):void {
		var bit:BitmapData = new BitmapData(n,n);
		bit.draw(ldr);
		images.push(bit);
		NativeApplication.nativeApplication.icon.bitmaps = images;
	}
}
if (NativeApplication.supportsDockIcon) {
	setTaskIcon(128);
} else if (NativeApplication.supportsSystemTrayIcon) {
	setTaskIcon(16);
}
delete setTaskIcon;


結局アイコンを読み込むところを関数にしただけで、根本的なところは何もかわっていないですし、実際には関数そのものやイベントリスナーなんかも消すことが出来るのですが、そこらへんの方法を言い出すときりがないので自分がご提供できるのは一旦このへんにしておきます。

もともとの発端は、AIRだとFileやIconなど色々と面白いクラスがあるのでこうゆうことを簡単にできないかと思ったんですが、FileとFileStreamだとせっかくpngファイルを読み込んでも一旦デコードしないとBitmapDataとして扱えなかったり、Iconは読み込んでももともとそのファイルに関連づけられてるアイコンしか扱えなかったりで、結局はFlashにもとからあるLoaderからdrawするというベタなやり方以外に何か方法はないものかと思っての事でした。

何か僕が決定的な勘違いをしている場合もありますし(というかそっちの線の方が濃厚)、他のやり方があれば是非ともお教え下さい。
いろんな面白い方法、こんな方法もあったのか、ってやつ、気長にお待ちしています
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops