Hatena::ブログ(Diary)

NetPenguinの日記 このページをアンテナに追加 RSSフィード

'アニヲタ' 兼 Perfume ファン 兼 'Scala, C/C++, Java プログラマ'
日々の愚痴をつづる日記です。
FTPソフトの NetPenguin とは何の関係もありません。

2009-03-05

[] Actor の link について訂正 20:24  Actor の link について訂正を含むブックマーク  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

[] リサイズ可能なポップアップウィンドウ 01:04  リサイズ可能なポップアップウィンドウを含むブックマーク  リサイズ可能なポップアップウィンドウのブックマークコメント

リサイズ可能なポップアップウィンドウのサンプルを作ってみました。

普通マウスイベントを拾って、マウスドラッグを処理するだけです。

画面真ん中に表示される、ポップアップウィンドウの右下 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