014

プロパティを調べる
ボタンとフィールドのプロパティ
Array(配列) combine, split を使う

the propertyNames
the properties of object
combine array, split variable
accelKey, accelMods, accelText,
autoArm, armFill
foregroundColor, backgroundColor, hiliteColor, borderColor, topColor, bottomColor, shadowColor, focusColor


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

今まで 13 の項目を書いてきて、この型録もこれから進むいくつかの方向に、漠然と分類できるように思っています。まず他のXTalk との言葉や操作の違いに焦点を充てて、HyperTalk やSuperTalk からの移行がたやすくできるようにすること。Revolutionでアプリケーションを開発する際のTips。それから基本的な内容で、ドキュメントや開発ツールを補充するような要素などが考えられます。今回は内容としては最後のミッシングマニュアルのように、オブジェクトのプロパティの補足情報と、いくつかのTipsも入れてみました。ついでに他のXTalk にはない Array(配列) の簡単な説明と使い方も。これじゃ全部か。

Transcript にあるすべてのプロパティのリストは、

the propertyNames

で得る事ができます。さらに Global Properties はメッセージボックスの Global Properties で、そのリストと値の確認ができます(下図)。



ここでやろうとしているのは、ボタンやフィールドなどのカード上で操作できる、目に見えるオブジェクトについてです。オブジェクトのプロパティはArray(配列)で収納されていますから、たとえばボタンでしたら

put the properties of btn 1 into myProp

で、オブジェクトのプロパティリストをmyPropと言うArray(配列)にする事ができます。それぞれのプロパティの値は、アレイ myPropから key(この場合はプロパティネーム) で得ることができます。ボタン 1 のプロパティネーム(key) は

the keys of myProp

とすれば、改行をデリミッターでリスト全部を書き出せ事ができます。

例えばプロパティの中の一つ threeD をキーとして使って myProp["threeD"] とすれば、ボタン1のプロパティ threeD が true かfalse かがわかります。この要領ですべての key を myProp[key] として、リピートでひとつづつ入れて書き出せば、ボタン1のすべてのプロパティの値がわかるのですが、Revolution ではこんな場合は combine を使う方法があります。



Revolution のArray 説明

他のXTalk ではArray(配列)を使わなかったと思いますから、Revolution の Array(配列)について基礎的な説明をしておきます。Revolution のArray(配列)をすでに理解している方は、飛ばして読んでも良いかもしれません。

簡単な例を見るのが手っ取り早いでしょう。myList というアレイ(array)を作ってみます。A,B,C はエレメント(element)、firstLetter, secondLetter, thirdLetter はエレメントを取り出すためのキー (key)です。

put "A" into myList["firstLetter"]
put "B" into myList["secondLetter"]
put "C" into myList["thirdLetter"]

この三行のスクリプトで、myList["firstLetter"] には"A"が記録されます。同じようにmyList["secondLetter"] には"B"が、myList["thirdLetter"] には"C"が記録されます。これでmyList という名前のアレイが作られました。

アレイ myList のキーは

the keys of myList

とすれば、

firstLetter
thirdLetter
secondLetter

と、the keys を得る事ができます。(the keys を求めた場合必ずしもアルファベット順の表記はされません)

アレイ myList に入っているfirstLetter をキーとするエレメントは

get myList["firstLetter"]

で取り出す事ができます。つまり it には"A" が入ります。



こんどは別な方法で、アレイ myList からA,B,C というエレメントを取り出す方法、コマンド combine を使ってリストに書き直します。

combine myList using comma
put myList

とすると、

A,B,C

と、アレイ myList に記憶されていたエレメントのリストを、コンマをデリミッターでメッセージボックスに書き出すことができます。(アレイを combine でリストに直した場合は、アルファベット順で書き出されます)コンマの代わりにリターン(return) をデリミッターとして書き出すと、タテに A、B、C が並んで書き出されます。combine された後の myList は、もうアレイではありません、

combine は、ふたつのデリミッターを使う事もできますから、たとえばアレイmyList を、リターンとイコールをデリミッターとしてcombine するスクリプト

combine myList using return and "="
put myList

を実行すると、メッセージボックには

firstLetter=A
secondLetter=B
thirdLetter=C

のように、イコールで繋がれたキーとエレメントを、リストにして書き出すことができます。(アレイを combine でリストに書き出した場合は、アルファベット順で書き出されます)myList は、もうアレイではありません、この後試しに

put the keys of myList

としても、empty が出ます。



split は、この combine とちょうど反対の役割をして、文字列をアレイに作り変えます。

put "A,B,C" into myList
split myList by comma

コンマで繋いだ文字列"A,B,C"を、コンマをデリミッターで split すると、 myList というアレイが作られます。キーを指定していないので、この場合キーには番号が順番に割り振られます、この後

put the keys of myList

とすると

1
2
3

がメッセージボックスに入ります。
(the keys を求めた場合必ずしも番号順、またはアルファベット順には表示されません)

split でアレイにした myList から "A,B,C" を取り出すにはふたつの方法があって、ひとつは番号の キーを使って、myList[1] は A 、myList[2] は B、myList[3] は C と、エレメントを取り出すことができます。

もうひとつは element という言葉を使って myList からリピート(for each element)で

repeat for each element theElement in myList
put theElement &return after msg
end repeat

とすると

A
B
C

がメッセージボックスに入ります。(この方法で element を求めた場合、必ずしもアルファベット順にはなりません)



combine とsplit は、アレイを文字列のリストにもどしたり、文字列のリストをアレイに作り替えたりできるので、一組のコマンドとしてアレイを扱う上で非常に便利です。

用語について:
コンピューターの翻訳語はなかなかしっくりこない事も多く、すでに日本語として内容が理解される言葉も多いので、無理な翻訳語は避けて、Revolution ドキュメントで使っている用語に沿ってをカタカナ表記にしました。


</Revolution のArray 説明>終わり



combine を使うと、アレイのキーとエレメントを同時に書き出せますから。
014.rev では

put the properties of btn 1 into myProp
combine myProp using return and "="
put myProp into tPropList

で、プロパティとその値を、イコールで繋いだリストで書き出しています。「Btn1 List」をクリックすると、そのボタンのプロパティのリストが、右上のフィールドに書き出されます。ボタン「Btn1 List」は名前を付けてサイズを変えただだけで、後はデフォルと同じ設定のボタンです。プロパティリストとあるフィールドをスクロールして行くと、 colors= とある行が見えて、値は何も見えません。このはプロパティ colors はさらに8種類のプロパティがあるのですが、デフォルトではブランクとして表示されてしまいます。同じような扱いのプロパティは他に patterns があります。

014.rev では、この colors だけ別のフィールドに取り出すことにしました。



次の「Btn2」は、デフォルトのプロパティのボタンだったのを、いくつか変更したサンプルです(上図で、変更したプロパティの一部がリストに見えています)。トップの accelKey はボタンをマウスクリックではなく、キーボードからマウスアップさせるショートカットのキーです(m にしました)。次の accelMods はaccelKey とのコンビネーションで使うキーボードのキーです(alt = option)です。つまり Option (Win ではAlt) + m で「Btn2」をクリックしたのと同等の動作をするプロパティをセットしています。次の accelText は opt-M としてこのショートカットのヒントが、ボタンの右すみに表示されるようにしました。以下がそのスクリプトです。

set the accelKey of btn 2 to "m"
set the accelMods of btn to alt
set the accelText of btn 2 to "opt-M"

実はこの例はスクリプトを実行しなくても、オブジェクトインスペクターで設定ができます(下図)。



しかしオブジェクトインスペクターでは設定できないプロパティもあるので、時にはこういったプロパティのチェックをしておくのも必要かもしれません。

ひとつ例を作りました。よくWeb ページなどにあるロールオーバーのように、マウスをボタンの上に重ねるとハイライトになるプロパティ(autoArm)があります。デフォルトでは false ですが、これをtrue にするとロールオーバーのような効果がだせます。ただし armFill もtrue に設定しないとハイライトにはなりません。このようにいくつかのプロパティを設定して始めて現れる効果もあるので、その辺りの注意も必要です。

set the autoArm of btn 2 to true
set the armFill of btn 2 to true

autoArm の例で、もうひとつ追加すると、



ボタンのインスペクターの Icons & Border に Armed Icon という設定があって(上図)、ボタンにマウスオーバー(armed)でアイコンが現れるようアイコンのID を書き込んでおいても、スクリプトで autoArm を true にしておかないと、期待した効果が現れません。

この Btn2 はカラーの設定も変えていますが、これらのほとんどはインスペクターの Colors & Patterns で設定できるものです。ひとつ例外があって、 borderColor はインスペクターからカラーパレットが開けられないので、スクリプトで設定します(バグ?)

set the borderColor of btn 2 to 204,204,204


最後のカラー focusColor は設定できるのですが、何が focusColor か focusBorderなのか、確認できていません。

014.rev の最後に、フィールドのプロパティリストを得るボタン「field PropList」を置いていますから、どんなプロパティがあるかリストを見てください。colors と patterns はデフォルトの状態では空白になります。



013 / 014 / 015

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