006

サブスタックをクリエイトする。
ウインドウ(スタック)のデコレーションを変える
メインスタックのカラー、フォントの継承 (the object hierarchy)

create
mainstack
decorations
label (title)
metal (MacOSX)


RR Player に 006.rev と入れてスタックをダウンロードしてください。
Revolution の開発環境がある方は、メッセージボックスに
go stack url "http://www.kenjikojima.com/runrev/handbook/download/006.rev"
とタイプしてリターンキーを叩く事でもダウンロードできます。

ダウンロードされたスタックは、「createSubstack」という名前を付けたメインスタックです。
Revolution ファイルには、必ずひとつのメインスタックがあります。メインスタックはその性質を理解していないと、少し扱いにくい面もあって、複数のウインドウを必要とするアプリケーションなどでは、始めのタイトルだけを見せるスプラッシュに使ったりする方が、扱いやすい時もあるかもしれません。

ひとつにはアプリケーションになった時、メインスタック上の書き換え(保存)ができないと言うことがあります。もしメインスタック上の書き換えた状態を保存して、アプリケーションが次に開かれた時その状態で見せたいのなら、必ずサブスタックに参照を残して『サブスタック』を保存しておく必要があります。またはサブスタックを書き換えて、保存したサブスタックを次に見せるようにします。そう考えてみると始めからメインスタックは、スプラッシュウインドウとした方が良いとも思えるでしょう?

それから、スクリプトを書く上で気を付けなければいけない問題は、サブスタックが開かれた時にも必ずメインスタックの preOpenStack とopenStack が実行されます。もしアプリケーションを開いた時だけメインスタックで何かさせたいときは、メインスタックのカード1にスクリプトを書いておかないと、毎回サブスタックが開かれる度に、期待しないスクリプトが実行されてしまいます。

もうひとつメインスタックの大事な性質は、メインスタックに設定したカラーやフォントは、そのメインスタックに属している全てのサブスタックに継承されます。あとで簡単な実験をしてみましょう。この継承の注意点は、もしメインスタックをユニコードで設定すると、他のサブスタックもデフォルトでユニコードがタイプされることになりますから、数値を扱ったりするサブスタックのウインドウの場合、ちょっと扱いにくい状態になります。

メインスタックの事はこれくらいにしておいて、本題のサブスタックをクリエイトする方に移りましょう。見た目のスタックも、操作も、いたって単純なものです。




デモのために中身を少し複雑に作ってありますから、基本の機能だけの説明をします。

見えているのが「craeteSubstack」という名前のメインスタックです。ここから「Sub_1」というサブスタックを作るスクリプトは以下です。


create stack "Sub_1"
set the mainstack of stack "Sub_1" to "createSubstack"


「サブスタックを作るスクリプト」と書きましたが、実は始めの行では "Sub_1" というメインスタックを作っています。そのあとでスタック "Sub_1" を別なメインスタック "createSubstack" に、そのサブスタックとしてセットするという手順を踏みます。

この 006.rev では、ウインドウのデコレーションを、ボタン設定でできるようになっています(サンプルで取り上げたデコレーションは下の6種類、Windows 版では最後の metal はありません)。

default
title,close,minimize (title,menu,close,minimize)
title,close,maximize (title,menu,close,maximize)
menu
empty
metal


ウインドウ(またはスタック)のデコレーションと言うのは、ウインドウに付いたタイトルバーなどの状態を設定するものです。ウインドウのデコレーションは、スタックのプロパティインスペクターの、 Controls からでも設定できるようになっていますが、インスペクターの図が間違っていたり(バージョン2.2)、かなりの頻度で必要と思える close (クローズボックス) の設定がなかったりするので、ここでスクリプトを使用した設定を取り上げました。基本を理解すれば、インスペクターにない設定も簡単です。これ以外にもいくつかのデコレーションがありますから、辞書を見てください。またインスペクターの Controls に、デコレーションの種類をタイプすることでも設定できます。

上記デコレーションリストでカッコ内になっているのは、Windows 版の設定です (title,menu,close,minimize) など。menu がMacOX 版より多く付いていますが、Windows では menuの項目を加えないと、MacOSXと同等なタイトルバーが得られないためです。 MacOSX では menu という項目が付いていてもいなくても、視覚上の違いはありませんから、クロスプラットフォームでの開発でしたら、始めから menu を付けた設定でもかまいません。ここでは説明のために、別なデコレーションと扱いました。

では通しで、始めからデコレーション設定までのスクリプトを書いてみましょう。


create stack "Sub_1"
set the mainstack of stack "Sub_1" to "createSubstack"
set the decorations of stack "Sub_1" to "title,close,minimize"


"title,close,minimize" の部分は必要に応じて menu, empty などに書き換えられます。metal はMacOSX だけのデコレーションですから、最後に取り上げます。006.rev ではサブスタックに Sub_1, Sub_2 などのような、スタック名を付けています。メインスタックとサブスタックの構成は、アプリケーションブラウザーで見る事ができます(メニューバーの Tools > Application Browser )



この図で見ると the name of this stack で「Sub_1」となっているサブスタックのタイトルバーは、「default」となっているのが判ると思います。Revolution ではスタックまたはウインドウの名前が、必ずタイトルバーに反映されるとは限りません。スタックの label (title に同じ)というプロパティに設定した名称が、まず第一にタイトルバーに反映されるようになっていて、 スタックの label (title) が設定されていない場合は、スタックの name (上記では Sub_1など)がタイトルバーに現れます。タイトルの設定は、簡単にはプロパティインスペクターを使いますが、スクリプトでは下記のようになります。


set the label of stack "Sub_1" to "My Title"


label の設定はスタックの名前( the name of this stack) ではないので、いくつもの単語をスペースで繋ぎ合わせても、スクリプトを書いて行く上であまり問題にならずに、視覚上や理解しやすいウインドウ名が付けられる利点があります。現在のバージョン(2.2)では日本語は使えません。


それでは継承 (the object hierarchy)について、わかりやすい実験をしてみましょう。3つか4つほどのサブスタックを、まず作ってください。次にメインスタック、つまり stack "createSubstack" のプロパティインスペクターを開けて、Colors & Patterns にします。Background カラーをクリックすると、OS のカラーパレットが現れますから、どれでも色を選んで OK してください。メインスタック、サブスタックのバックグラウンドカラーが、いっせいに統一されて変わるのが確認できます。



ここまでが今回の基本的な内容です。

006.rev では、いくつものウインドウを出したり、消したり、きちんと並べたり、また説明を加えたりするためのいくつかのギミックを使っています。興味のあるかたは、開発環境またはメインスタックの下段にある、「スクリプトを見る」で中をご覧ください。


006 付録:Mac OSX のメタルテクスチュア



これもまたプロパティインスペクターで簡単に設定できますが、少し普通のデコレーションとの違いがあります。いったんスタック(またはサブスタック)を作ってから


set the metal of stack "Sub_1" to true


でウインドウ全体をメタルテクスチュアに変えます。また普通 MacOSX のメタルはどこを押さえても移動できるようになっているので、実用には 003 で使った全体を動かすスクリプトを、カード1のスクリプトに入れてください。この 006 のサンプルでは、タイトルバーだけの移動だけです。切り抜きウインドウシェイプでは、メタルは設定できません。また閉じたり削除した時、テクスチュアのイメージが画面に残ったりもすることがあるので、alwayBuffer での調整が必要なこともあります。006 ではメタルウインドウを消す際に、


set the alwaysbuffer of this stack to false


としています。


005 / 006 / 007

わかりにくい事がありましたら、遠慮なくメールしてください。
index@kenjikojima.com