Home > Adobe AIR Archive

Adobe AIR Archive

Adobe Developer Box 開発日記(3)

  • Posted by: hirossy
  • 2009年2月 7日 00:56
  • Adobe AIR
adb_20090205.png

Adobe Developer Connection に記事を投稿しました。

VBox を利用して簡単にリストを作ろうぞというお話し。
そして VBox の縦スクロールを 無理矢理 Tween させましたというお話し。




http://www.adobe.com/jp/devnet/air/articles/adb_howto_develop_ria_part3.html
連載3) リストの作成


http://www.nankaifactory.com/samples/adc_listsample/
サンプル。右クリでソースゲットできる。


Max基調講演でADB

  • Posted by: hirossy
  • 2009年1月31日 12:55
  • Adobe AIR
2009012910420000.jpg

MAX 初日の基調講演で Adobe Developer Box が紹介されたよ〜


プレス
http://enterprise.watch.impress.co.jp/cda/software/2009/01/30/14813.html


AIR ギャラリーにも登録されてる



まだベータ版。


Adobe Developer Box 開発日記(1)


Adobe Developer Connection に投稿しました。

adc_adb1.png

http://www.adobe.com/jp/devnet/air/articles/adb_howto_develop_ria.html
連載1) RIA開発どうやって進める?


「ADB」という現在開発中プロジェクトの進行について連載形式で書いています。
詳しくは直接記事を読んで下さい・・・


しかし、記事を書くってなかなか難しいですね。痛感しました。

Enterprise RIA

  • Posted by: hirossy
  • 2009年1月26日 10:37
  • Adobe AIR


住友信託銀行、63営業店舗の業務システムを強化


大規模なAdobe AIR案件。しかも金融系。すごいぜ!!


AIRの起動中に

  • Posted by: hirossy
  • 2009年1月20日 00:00
  • Adobe AIR

AIRの起動中にもう一回exeをキックすると

起動中のAIRアプリの invokeイベントが呼ばれるそうです。


ちゃんとコマンドライン引数も渡ってくるそうです。



という豆知識は、某 北大阪AIR 案件の忘年会でのお話し。


Flash Player 9.0.16 のバグ


FP 9.0.16

このバージョンでFlashのサイトを閲覧すると、最初の Event.ADDED_TO_STAGE が無視されるそう。

なのでもし、ADDED_TO_STAGE をトリガーにして処理を書いているプログラムは、表示されません。



こわいね

プリントマジック

  • Posted by: hirossy
  • 2008年12月31日 17:59
  • Adobe AIR

年賀状作成アプリ  プリントマジック(http://www.print-magic.net/)

Adobe AIR製。よく出来てる〜

うちもこれで作りました。




-年賀状-

borderStyleに対応したText, Label (3) Fleverlight勉強会


Fleverlight勉強会お疲れ様でした。

他のコミュニティさんとやるといろんな刺激があって楽しいですね。やっぱ。

ぼくの発表内容です。(Winだとフォント変わります。。)



ソースは右クリ。(Tweener使ったけど含んでない。ご自身でTweenerを足して動かしてくだされ)

以下発表内容

  • カスタムコンポーネントとSkin。
  • 1)MXML(XMLファイル)で画面を作ります。
  • 2)画面の要素(TextInputやComboBoxなど)はコンポーネントと呼びます。
  • 3)コンポーネントはFlex SDKにあらかじめ用意されています。
  • 4)コンポーネントはスタイルを設定して見た目を変更できます。
  • 5)コンポーネントはSkinを変更する事もできます。
  • 6)コンポーネントは自作することもできます。
  • 7)ふつうはFlex SDK のコンポーネントを継承して作ります。
  • 慣れると簡単に作れるのでぜひ一度作ってみてください。 以上。


他の方の発表資料は SilverlightSquareさんところに集まるっぽい。 しっかしライブコーディングがヤヴァかった。お二人とも。

OSFlash本



Book Release: The Essential Guide to Open Source Flash Development


なにかとお世話になっているOpen Source Flash。からの本。

borderStyleに対応したText, Label (2)


Skin を指定できるようになった Label に対して borderSkin を作って指定してみる。


Using TextFields and Bitmaps in a programmatic skin ( n-kawaiさんのblog )


こちらで文字付き Skin の作り方が紹介されてたので
同じようなのを違ったアプローチで作る。


ソースは右クリ。

Skin が使える Label に Skin を作って適用してみました。
もっとFlexっぽくいくなら、HaloBorder ベースで作ったほうがいいかもですね。

borderStyleに対応したText, Label (1)


mx.controls.Label や
mx.controls.Text に

backgroundColor や borderStyle , borderSkin を。

Canvas と TextInput のソースから移植して実現。




ソースはこちら

source

Flex SDK の defaults.css で global に borderStyle : "inset" が設定されてるので本来の素のデフォルトは枠線がつきます。
なのでそれが嫌な場合は、css で borderStyle : "none" を書いてやって下さい。

さて、スタイルでいろいろ装飾できるので便利やけど
ただでさえ重いFlexなだけに、単純に文字だけでいい場合はこういうの使わない方がいいと思う。

何がどう入力されたのかがわかるTextInput


TextInput のカスタムコンポーネントを作りました。




概要
・テキストがどう編集されたのかがわかる。
・でもInsertキーを無効にしておく必要がある。


source

基本的には、TextEvent.TEXT_INPUTのイベントハンドラにてDispatch。
BackSpaceキーとDeleteキーの場合は、KeyboardEvent.KEY_DOWN。
という KEY_DOWN と TEXT_INPUT の両イベントの組み合わせ。

まあ、ニッチですわな。

入力項目つきTextInput


TextInput のカスタムコンポーネントを作りました。




概要
・入力項目名(かまたは入力書式など)を内包してるので、レイアウトスペースが節約できるかもしれない。
・何を入力したらよいのかすぐわかるかもしれない。
・focusIn で消す。
・focusOut で未入力なら再表示。


source


exampleTextColor というスタイルで色指定できるようにしたんやけど、
updateDisplayList で exampleTextField の色を設定してるのが自分で気になってる。
ほんとは createChildren で一回だけ色指定したいんですがー。


DataGrid のレンダラーとしては試してないからどうなるかわからない。


FlexでInsertキーによる上書きモードをスルーする。

Insertキーを無効にする。



ニッチな要件だと我ながら思う。

stage,systemManager,root,application (2)

stage, systemManager, root, applicationの実験の続き。

実験2




上からベースアプリ、ModuleLoaderでロードしたモジュール、SWFLoaderでロードした別アプリ。

それぞれのtoolTIpで各プロパティの値がわかる。


ベースアプリの情報
■ stage :
[object Stage]
■ systemManager :
[object _BlogSample2_mx_managers_SystemManager]
■ root :
[object _BlogSample2_mx_managers_SystemManager]
■ Application.application :
BlogSample2_0

 Moduleの情報
 ■ stage :
[object Stage]
 ■ systemManager :
[object _BlogSample2_mx_managers_SystemManager]
 ■ root :
[object _BlogSample2_mx_managers_SystemManager]
 ■ Application.application :
BlogSample2_0


 ロードした別アプリの情報
 ■ stage :
[object Stage]
 ■ systemManager :
[object _BlogSample2_OtherApplication_mx_managers_SystemManager]
 ■ root :
[object _BlogSample2_OtherApplication_mx_managers_SystemManager]
 ■ Application.application :
BlogSample2_0



なんか予想を裏切られたなー

stage
みんな同じ


systemManager
ベースアプリとモジュールは同じ。別アプリは別アプリのsystemManager


root
ベースアプリとモジュールは同じ。別アプリは別アプリのroot(systemManager)


Application.application
みんな同じ(BlogSample2_0 : ベースアプリのApplication.mxmlのこと)



うーん。。。


実験ソースはこちら
ベースアプリのプロジェクト(Module含む)
ロードされる別アプリ




ところで全然関係ないけどModuleLoaderってswfファイルからの相対パスじゃなくてURLの相対パス入れないと駄目なのね

stage, systemManager, root, application (1)



stage, systemManager, root, application

表示のルートっぽいプロパティがいっぱいでどれを使えばいいのかを悩むことが多い。


stage

言わずと知れた最上位。
他のアプリケーションからロードされた場合、ロードした側のアプリでもロードされた側のサブアプリでも stage は同一を指す。
stage プロパティは、自分自身が表示リスト上に addChild() されるまでは nullになっている。
前回のApplication(またはWindowedApplication)のcreationComplete()でstageがnullになってるのは、Application自身が表示リスト上にまだAddChild()されていないから。

systemManager

systemManager プロパティは、他からロードされた場合、ロードされた側のサブアプリでは、そのサブアプリ内での SystemManager インスタンスを指す。
ちなみにApplication (AIRではWindowedApplication)は、SystemManager によってインスタンス化される。

root

SWFファイル内での最上位を指す。
FlexアプリケーションのSWFでのrootはSystemManagerになる。
Bitmapオブジェクトのみを持つSWFファイルなら、rootはbitmapオブジェクトを指す。
但し、stage の root は stage 自身を指す。
Moduleの場合、SWFファイルは別になるけどrootは親SWFと同一。

application
Application.application

メインのMXMLインスタンス(ApplicationクラスまたはWindowedApplicationクラス)を指す。
ロードされた場合も、そのサブアプリ内のメインのMXMLインスタンスを指す。
Moduleの場合、SWFファイルは別になるけどrootは親SWFと同一。


実験1



やっぱややこしいってば。

creationComplete()だとstageがnullで困る

アプリの初期化時に stage プロパティにアクセスしたいときは多々ある。
でもApplication(メインのMXML)の creationComplete() ではまだ null で困る。



preinitialize()〜creationComplete() の時点でstageを利用できる方法を思いついたので書いてみる。



結論
systemManager.stage としてアクセスすれば良い

発見!

stopPropagation()とstopImmediatePropagation()

メソッド名読めます?


イベントの伝播を止める

public function preventDefault():void

イベントに関連付けられたデフォルトの動作をキャンセルする。
但し、Event オブジェクトの cancelable プロパティが true のものだけ有効。

public function isDefaultPrevented():Boolean

既にデフォルトの動作がキャンセルされているかどうか。
戻り値が true なら既に preventDefault() が呼ばれている。

public function stopPropagation():void

そのメソッドを呼び出したイベントリスナーが登録されているオブジェクトでイベントリスナーの呼び出しを終了させる。
※ 現在イベントを処理中のオブジェクトにまだ実行待ちのイベントリスナーが登録されていたら、それは実行する。
※ 有効な対象は自分で追加したリスナーに限定される。
2008/6/20 追記:"自分で追加した"は、ActionScript3のデフォルト以外でという意味。mx.〜系のFlex Framework にて追加されている分は含まれる。みたい。


public function stopImmediatePropagation():void

そのメソッドを呼び出したイベントリスナーが登録されているオブジェクトでイベントリスナーの呼び出しを終了させる。
※ 自身が登録されているオブジェクトを含め、以降のイベントリスナー呼び出しを行わない。
※ 有効な対象は自分で追加したリスナーに限定される。
2008/6/20 追記:"自分で追加した"は、ActionScript3のデフォルト以外でという意味。mx.〜系のFlex Framework にて追加されている分は含まれる。みたい。


上記すべて akihiro kamijoさんのブログの December 09, 2005 の記事から抜粋


さて、問題なのは自分の英語力の無さだったりする。

上記メソッドは、
DataGridなどの複雑にコンポーネントが入り組んだコンポーネントにさらにたくさん手を加える時などによく使っている。

でも

メソッドが読めない。

ペアプロしてても
「ストップなんとかって書いたらええんちゃう?」
で通じ合う(笑)


なので、メソッド名から振る舞いのイメージが全く沸かない。


prevent [ぷりヴぇんと] 妨げる,防ぐ.

preventDefault は デフォルトの(イベントリスナ)を妨げる。

propagate [ぷらぷぁげぃと] 伝播する.

stopPropagate は 伝播を止める。

immediate [いみでぃえっと]直接の, すぐ近くの; 即時の; 当面の; 一番近い.

stopImmediatePropagate は 直接の伝播を止める。

ということなんですね。



あーすっきりした。

asDoc いえいえ aasDoc



AIRのasDoc作成ツールは asdoc じゃなくて aasdoc だから気をつけろっ




一行で終わるのも何なので
以下知ってると思うけどasDocに関する補足情報まとめ。



1) asDoc作成ツール


flex sdk の bin の中にある。

AIRなら
aasdoc.bat ( for Windows )
aasdoc ( for Mac )

Flexなら
asdoc.exe ( for Windows )
asdoc ( for Mac )



2) Eclipse上からant実行するほうが楽かも

コマンドラインから実行してもいいけど
FlexBuilder使ってる人はEclipse上からAnt実行できたほうが断然楽やと思う。

build.xmlは

http://blog.bittube.com/ さんが公開してる asdoc作成build.xml をベースに作る。

(情報元 ASDocのAnt用build.xml satoshiさん)

出来上がったHTMLもsvnで管理してる場合は
asDocフォルダを丸ごと消さずに
defaultexcludesを書くか、「**/.svn」「**/.svn/**」を除外して
古いdocをdeleteするなどの工夫が必要。



3) その他情報


BeInteractive! [AsDoc]

BeInteractive!さんのところに
「ADOBE FLEX 3 アプリケーションの構築と展開」の第13章のところに載っていないことが載っている。


でも @includeExample は今は使えないようになっていると思われる。




以上 enjoy aasdoc !

Download Adobe AIR for JavaScript Developers Pocketguide

  • Posted by: hirossy
  • 2008年4月18日 10:19
  • Adobe AIR

Download Adobe AIR 1.0 for JavaScript Developers Book

Ajaxian has just posted the PDF download for the Adobe AIR for JavaScript Developers Pocketguide Book (published by O'Reilly).



pdfがダウンロードできるよ



ダウンロードしたよ

AS3のSingletonの書き方をちょっと変えた。リベンジ。


こないだのSingletonがうまく動かなくて自分でへこんでたからリベンジだこのやろう。


というわけで、さかっさんとの合作で出来上がった新しいSingleton。



コペルニクス的逆転の発想。


パッケージ外クラスでインスタンスを取得してやるのさっ


これでget instance の度にnewするべきかどうかチェックしなくていい。

Wicked南海謹製なり。

ModuleLoader,SWFLoader。そしてやはりSingleton。


ModuleLoaderやSWFLoaderを利用してアプリケーションを分割するのは規模が大きいときはマスト。


でも各モジュール間や各SWF間でのデータ連携は大変!!ではない。


絵で説明する。
2.png

こうしてやってBindingしてやれば簡単っしょー。


でもこれやるにはひとつだけポイントがあるのね。


呼び出し元(ロードする側)でSingletonのインスタンスを先に一回取得しておいてやること


そうすればもうあんた、
アプリケーションだろうがモジュールだろうがドンと来いだっつうの



という一年前のスレッドに対する答え。。

AS3のSingletonの書き方をちょっと変えた



何かを管理するクラスを作るときはSingletonを多用する。とにかくよく使う。


で、ずっとこう書いてきた

つかいかた


2008/04/02:新しいSingletonを書いてたけどちゃんと動作しないから削除。した。ごめん。
2008/04/04:リベンジした。AS3のSingletonの書き方をちょっと変えた。リベンジ


ちなみに、一応書いておくと、

パッケージの外にクラスを書く(上記HogeSingletonInternal,MogeSingletonInternal)と、
このファイル内からしかアクセスできないので、上記クラス以外からシングルトンをnewしようとしてもErrorがスローされるYO!



明日来るからあすくる

  • Posted by: hirossy
  • 2008年3月28日 00:29
  • Adobe AIR


ASKUL DESKTOP


法人向け注文アプリ by Adobe AIR。


そうだよね。



専門性が高く、かつ繰り返し購入するような商材を販売する場合って

Adobe AIRの選択は悪くないよね。


Index of all entries

Home > Adobe AIR Archive

HIROSSY BLOG
Feeds

Return to page top