日々の愚痴をつづる日記です。
FTPソフトの NetPenguin とは何の関係もありません。
2009-03-05
■[Scala] Actor の link について訂正

以前、Actor の link について、以下のように書いたのだけど、勘違いしてたみたいなので訂正。
注意点?として link は、リンク元のアクタ内で設定する必要があります。
Actor の link について
リンクは双方向になるように設定されるため、リンク元とか関係ないです。
link メソッドを呼び出すと、引数に渡されたリンク先アクタの linkTo メソッドも呼び出されて、双方向にリンクが設定されます。
ですので、以下のように利用がわ/利用される側の参照関係を崩さないで、リンクの設定がちゃんと出来ます。
まぁ、当たりまえっちゃ当たり前ですが。
val child = actor {
self.trapExit = true
loop { react {
case 'live => println("5/9,10 は代々木!")
case Exit(_, _) => exit
}}
}
val parent = actor {
link(child)
loop { react {
case 'perfume => child ! 'live
case 'exit => exit
}}
}
parent ! 'perfume
parent ! 'exit
■[Flex] リサイズ可能なポップアップウィンドウ

リサイズ可能なポップアップウィンドウのサンプルを作ってみました。
普通にマウスのイベントを拾って、マウスのドラッグを処理するだけです。
画面真ん中に表示される、ポップアップウィンドウの右下 10 pixel をドラッグすることで、サイズ変更できます。
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication
xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="creationComplete()"
>
<mx:Script>
<![CDATA[
import mx.containers.TitleWindow;
import mx.managers.PopUpManager;
private var _window:TitleWindow;
private function creationComplete():void {
_window = new TitleWindow();
_window.addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown);
PopUpManager.addPopUp(_window, this);
PopUpManager.centerPopUp(_window);
}
private function handleMouseDown(event:MouseEvent):void {
if (Math.abs(_window.width - event.localX)<10 &&
Math.abs(_window.height - event.localY)<10) {
systemManager.addEventListener(MouseEvent.MOUSE_MOVE, handleMouseMove);
systemManager.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
}
}
private function handleMouseMove(event:MouseEvent):void {
_window.width = Math.max(50, event.stageX - _window.x);
_window.height = Math.max(50, event.stageY - _window.y);
_window.invalidateDisplayList();
}
private function handleMouseUp(event:MouseEvent):void {
systemManager.removeEventListener(MouseEvent.MOUSE_MOVE, handleMouseMove);
systemManager.removeEventListener(MouseEvent.MOUSE_UP, handleMouseUp)
}
]]>
</mx:Script>
</mx:WindowedApplication>
注意することととしては、サイズ変更対象に対して MOUSE_MOVE と MOUSE_UP イベントハンドラを登録せずに、SystemManager に登録します。これは、サイズ変更対象の外側にマウスが移動した場合でもイベントを拾えるようにするためです。
コメントを書く
トラックバック - http://d.hatena.ne.jp/NetPenguin/20090305
2004 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 12 |
2008 | 01 | 03 | 04 | 06 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 04 | 11 | 12 |
2011 | 01 | 02 | 03 | 10 |
PV:257503
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 12 |
2008 | 01 | 03 | 04 | 06 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 04 | 11 | 12 |
2011 | 01 | 02 | 03 | 10 |