« 田宮版「白い巨搭」が夏休み、地上波に! | Main | 「オカラ」は「岡田」らしい »

Jul 27, 2004

【実験】C#フォームをFlashに置き換える

 たまには駆け出しのプログラマっぽい事でも書いときますよ。

 実は、卒業制作中、デモムービーをC#で作ったフォームに貼り付ける必要があったんです。で、調べてたらShockwave Flash Objectと言うコンポーネントを発見。これを利用してムービーを貼り付けたのです。

 で、これがどうして結構動作がいいじゃなーい。期待してなかったけど、そこまで重くないし、むしろFlashの表現力はやっぱり凄くって……。

 ここでちょっと閃き。卒研ではフォーム上での画面切り替えが多く、混雑になっているので、この状態をFlashを利用する事でスッキリ代替出来るかも。目指せPanel一ケタ!

 と言う訳で、C#でFlashを組み込む、ってのをテーマに改めてプログラムしてみました。

 完成した実行ファイルはこちらをどうぞ。AVGでウィルスチェック済みです。

 cs_test.lzh [125 KB]
 (Zipアップすると問題があるのでLzhに差し替えました)

 要.NET FrameworkとFlashPlayer6以降です。ちなみに動く保障は出来ませんし、サポートは無しでお願いします。分からない人はごめんなさい(ソースをいじる場合はVS.NET必須)。

 さて。作成に当たり、今回の狙いは以下の通り。

 ・表現力の乏しいC#の表現力を劇的に向上させる
 ・デザインはFlash、プログラムはC#と言う様に分離する
 ・FlashからのメッセージをC#で解釈し、処理する

 もちろん、C#でなく、C++やVBでもコンポーネントを利用できますが、基本私はJAVAプログラマなので、C#がVisualStudioの中では一番楽。で、安易にC#にて組みましたとさ(あ、JAVAは時間無いからパスで)。

 では、早速トライアル版をインストール(お金ないので)してFlash側の作成を開始します。

 コンポーネントからTextInput(t2に変更)とButtonをレイヤーに配置し、アクションスクリプトをチャチャッと書きます。流石、こういうツールなだけあって楽々ですね。

 ここでは、C#とのインターフェースに、よくブラウザへのデータ渡しに利用されるFSCommandを利用しました(と言うかそれしか思いつきません……)。

 具体的にはButtonに以下のコードを加えます。

c040727-0.gif

 ここでは、クリックが発生した場合、pushと言うコマンドを発行し、データとしてt2のプロパティ、textの内容を送っています。fscommand()の引数は、

 fscommand(string 引数1,string 引数2);

 って感じかな。ドキュメントを見た訳じゃないから何とも言えないけど。

 以上のアクションスクリプトを書き、Flash(.swf)を書き出します(注:コンポーネントの都合で、Flash6形式に最適化すると無難です)。

 で、今度はC#側ではソースにコンポーネントを配置、名前が長いのでFlashとします。.swfのloadはこちらのサイト様が詳しいのでどうぞ。

 sappari.org - wiki - C#の中にFlashを埋め込む

 そして、FlashのFSCommandイベントを、C#の特徴でもあるイベントハンドラで以下に飛ばします。

cs/c040727-1

 C#の良い所は、やっぱりイベントハンドラですよね。こちらも楽々実装できる事でしょう。

 コマンド(引数1)がpush場合の時だけ、処理を実行します。引数2はargsに入っています。これだけで、送ったデータをC#が処理してメッセージボックスを表示します。

 以上で実験は終了。実行すると……、どうでしょうか。

 まとめると、C#で利用できる一般的なWindowsフォームはほぼ利用可能。ややイベントやメソッド、プロパティが少ないですが、それ以上に結構ボタンもフォームもカッコいい。

 また、.NET Frameworkで作る場合、画面の切り替えが多くなるのであれば、Flashの方が優勢かもしれません。

 でも、値渡しが正直面倒臭くって、おまけにFSCommand発行中は、処理が終了するまでFlashはビジーになりますけどね(つまり、Flash側からフォームをCloseするのが面倒臭い)。

 それとFlashがムービーである以上仕方ないんですが、普通のWindowsフォームと違って、幅と高さを変更すると拡大されてしまうのは、ちと問題ですかね。

 個人的には、加えてMIDIとAACフォーマットのサポートを是非検討して欲しい。.NETのコンポーネントにろくなのが無いので、この2つを是非とも。

 私は割りと、描画と処理を分ける(例えば、CSSとHTMLとJAVA Scriptの関係)のが好きで、この概念を実現するために、スキンとしてFlashを利用するのは面白いのではないでしょうか。

 ただし。やっぱりFlashは結構不親切で使いにくいです。プロパティにコメントでないし。アクションスクリプトとプロパティがVS並みに動作してくれると、非常に使いやすいけどな。

 ん~、と言うより、C#にこの位強力なレイヤー管理機能でも搭載されればそれでも良いんだけど(笑)

 良い方法ないもんですかねぇ。

#取りあえず、いつかやってみたかったプログラムネタです。

|

« 田宮版「白い巨搭」が夏休み、地上波に! | Main | 「オカラ」は「岡田」らしい »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/1924/1060027

Listed below are links to weblogs that reference 【実験】C#フォームをFlashに置き換える:

« 田宮版「白い巨搭」が夏休み、地上波に! | Main | 「オカラ」は「岡田」らしい »