2009年11月15日日曜日

[Flex] コンポーネントのスタイルをActionScriptで変更するには?

単純に出来る作業ですが、今までやり方を知らなかったため、メモを残しておきます。


Adobe Flexでアプリケーションを作る場合、アプリケーションに設置するコンポーネント(ラベルやボタン、テキストインプットなど)の文字の大きさや色などのスタイルは以下のように指定できます。


< mx:label id="label" fontsize="18" color="#FF0000"/>


しかし、例えばActionScriptで書かれたイベントハンドラの中で、上のコンポーネントのフォントサイズを変更したい時は以下のように書きます。


label.setStyle("fontSize", 36);


idが「label」のオブジェクトに対して、setStyle関数を呼び出しています。第1引数が変更したいスタイルの名前、第2引数が変更後の値になります。


他のやり方としては[Bindable]メタデータタグをつけた変数を用意するという方法もありますが、これは後日

2009年11月14日土曜日

[Flex] ペイントの描画履歴を残す

Adobe Flexで線を描くだけの簡単なペイントツールを作成していたのですが、一度描いて消した絵をふたたび画面に表示させるため、どうしても描画履歴を残す必要があったのでその時のTipsを残します。(と言っても重要な部分のみですが)


基本的には、マウスで絵を描くペイントツールですから、マウスの移動中に発生するイベント(MouseEvent.MouseMove)をハンドリングする関数の中で処理を行うという形になります。


まずは、フィールドとしてはGraphicsオブジェクトと履歴を格納する配列を用意しておきます。
import __AS3__.vec.Vector;
_graphics:Graphics;
_graphicsData:Vector.< IGraphicsdata>


IGraphicsDataインターフェースは描画情報を管理するためのインターフェースです。
次に、イベントハンドリングする関数の中身ですが、まずは色や太さなどの設定を行います。


private function drawing(event:MouseEvent):void
{
// 色の設定
var solidFill:GraphicsSolidFill = new GraphicsSolidFill(LINE_COLOR);
// 線のスタイルの設定(引数は線の太さ)
var stroke:GraphicsStroke = new GraphicsStroke(PEN_SIZE);
// 先端の形(無し、四角、丸み)の設定
stroke.caps = CapsStyle.ROUND;
stroke.fill = solidFill;

次にGraphicsPathオブジェクトに対して、現在のマウスの座標と前回この関数が呼ばれたときのマウス座標を元に線描画の情報を入れます。GraphicsPathクラスは線を描いたところの描画命令とそれらの座標のコレクションになります。そして、先ほど設定した色や太さの情報と一緒に配列にプッシュします。

// 描画履歴を格納
var path:GraphicsPath = new GraphicsPath();
path.moveTo(_prevX, _prevY);
path.lineTo(event.localX, event.localY);
_graphicsData.push(stroke, path);


もちろん、描画も忘れてはなりません。

// 描画
_graphics.lineStyle(PEN_SIZE, LINE_COLOR);
_graphics.moveTo(_prevX, _prevY);
_graphics.lineTo(event.localX, event.localY);


最後にマウス座標をこの関数が再び呼ばれるときに備えて、その座標を別の変数に入れておきます。

_prevX = event.localX; 
_prevY = event.localY;
}


描いた絵を再び表示するためには、以下のように行います。


_graphics.drawGraphicsData(_graphicsData);


以上です。


参考サイト:
     「図形の描画履歴を保存する」 ・・・ http://hkpr.info/flash/game/sample/s088.php

2009年11月7日土曜日

Apache Wicket 2

前回に引き続いてApache Wicketです。codeZineで第2回目が掲載されていたのでちょっといじってみました。

前回はセッションどうするんだろうと疑問に思ってましたが、その点に関しての解説がありました。簡単にまとめると、

・WebPageクラスのオブジェクトはユーザがアクセスするたびに生成される。
・データはフィールドとして用意することで、ユーザはそれに対して取得・設定が出来る。
・ユーザ共通のデータに対してはstaticフィールドを用意する。

だそうです。ということは、ユーザがログインしてからログアウトするまでが1セッションになるので、途中でセッションタイムアウトになることは無いってことですかね・・・

あとは、アプリの作りこみ具合とユーザ数で場合によってはヒープを食いつぶす可能性があるのでそこには注意しないとね


※このブログを書いている時点で第3回目の記事が掲載されています