View this PageEdit this PageAttachments to this PageHistory of this PageHomeRecent ChangesSearch the SwikiHelp Guide

funfunfun23

PREV ------ ● TOP ● ------ NEXTUploaded Image: fmrph.jpg


ウィンドウはどう〜するよ?

ウィンドウをつくるのはどうやるんだろうって調べてみたんだけど、
参考になりそうなものがあまりないんだよね。
っていうかあるにはあるんだけど、今のおいらの頭ではよくわからんちんなのだ。
でも単純なやつならできそうな感じもするんでいざ挑戦!ってね。
これまた「モーフ妄想メモ」でこうゆうモーフが欲し〜い!!
って書いてたやつに近づきたいもんです。

■クラスを作るです

SystemWindowを親に新しいクラスを定義だよん。
--------------------------------------------
SystemWindow subclass: #TestMorph12
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	category: 'MyMorph'
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image.jpg


■インスタンスを出してみる

確認の為Workspaceに下記のコードを書いてドゥーイット。
--------------------------------------------
TestMorph12 new openInWorld
--------------------------------------------
Alt + d ( Cmd + d )

Uploaded Image: image1.jpg


おお!!ウィンドウが出てきましたな。でもこれってウィンドウの枠だけっす。
もちろん基本的なボタン類とウィンドウタイトル「UntitledWindow」はついてるよん。

Uploaded Image: image2.jpg


■メソッドを追加ですな

色の変更とウィンドウの中に「PastUpMorph」(遊び場「Playfield」のことですな)を
入れちゃいましょう。<サブモーフにするって事ね。
「frame: (0@0 extent: 1@1)」ってのは左上が「0@0」で左下が0?「1@1」ってことなんすけど
この場合「1」ってのは100%ってことみたいっすね。
--------------------------------------------
initialize
	| t1 |
	super initialize.
	t1 _ PasteUpMorph new extent: self width @ self height.
	self addMorph: t1
		frame: (0 @ 0 extent: 1 @ 1).
	self setLabel: 'Test12'.
	self setWindowColor: (Color
			r: 0.5
			g: 0.8
			b: 0.8)
--------------------------------------------
アクセプト。
Alt + s ( Cmd + s )

Uploaded Image: image3.jpg


インスタンスを出すと水色の遊び場ウィンドウの出来上がり!!
ウィンドウの中は「PastUpMorph」だよん。
Alt + d ( Cmd + d )

Uploaded Image: image5.jpg


試しに「部品」フラップからいろいろ引っ張り出してウィンドウの中にぶっこんじゃって見ましょう。
ウィンドウを移動してもちゃんといっしょについてくるだすな。大成功。(・・なのか?)

Uploaded Image: image6.jpg





PREV ------ ● TOP ● ------ NEXT







■ MEMO ■

Saturday, 21 February 2004, 8:28:33 am
なかなか面白い世界に突入してきましたね。
参考になるものがあまり無いように見えるのは、みんな SystemWindow を継承していないからだと思います。新しい種類のオブジェクトを作るには、継承(子供を作る)と委譲(組み合わせる)という二つの方法があって、SystemWindow は典型的な委譲を使うパターンです。例えばこんな風に
| window |
window := SystemWindow labelled: 'Play field window'.
window addMorph: PasteUpMorph new
    frame: (0 @ 0 extent: 1 @ 1).
window setWindowColor: (Color blue).
window openInWorld.

委譲を使うと、新しいクラスを作らなくて済みますし、どっちの子供にするべきか分からないような場合も悩まなくて済みます。委譲のあるコードのサンプルを見つけるには、クラス名を選択して reference to it (N) です。
--tak


Saturday, 21 February 2004, 1:38:17 am
まあこんな風に単純なウィンドウで遊びたかったっす。本格的なものを作る場合はどうも様子がちょこっとちがうみたいですな。さらなる調査を続行!!ってか。

Links to this Page