これは RuntimeRevolution 1.1.1 のヘルプにある文書を邦訳したものです。この文書の文責はUDIにあり、またUDIはこの文書についての一切の債務を負いません。 間違いがありましたら eudio@chabashira.co.jp までお知らせ下さい。この文書は必要と思われる時に適宜アップデートされます。

Help -> Revolution Documantation -> Development Guide -> Values & Properties -> About... properties, custom properties, and property sets


About properties, custom properties, and property sets
プロパティ、カスタムプロパティ、プロパティセット
==============

参照:
--------------
About containers, variables, and sources of value, Profile Manager Tutorial, Why doesn't a custom property appear in the Properties palette?, Object menu > Object Properties, Object menu > Card Properties, Object menu > Stack Properties, customKeys property, customProperties property, customPropertySet property, customPropertySets property, properties property, propertyNames function


 プロパティとは、Revolution のオブジェクトの属性のことである。それぞれの種類のオブジェクトには、そのオブジェクトの外観や動作を決定しているたくさんの組み込みプロパティがある。また任意のオブジェクトにカスタムプロパティを設定して、任意のデータを保存することも出来る。

 Revolution は、アプリケーション全体の動作を決定する多くのグローバルプロパティを持っている。グローバルプロパティはオブジェクトプロパティと同じように読み書きすることが出来るが、特定のオブジェクトには属していない。

 このトピックでは、プロパティの使い方、カスタムプロパティの作り方と使い方、そして getProp と setProp ハンドラを使って、カスタムプロパティの読み書き要求に応える方法を解説する。

 このトピックを十分に理解するためには、オブジェクトの作り方、オブジェクトのプロパティパレットの使い方、そして簡単なスクリプトの書き方を知っている必要がある。もし 'Getting Started' チュートリアルが済んでいるのなら、これらの情報は得られている。


Contents:
Built-In Properties
Custom Properties
Organizing Custom Properties
Attaching Handlers to Custom Properties


Built-In Properties
組み込みのプロパティ
 プロパティを使ってオブジェクトを完全に記述することが出来る。もし2つのオブジェクトのプロパティを全て同じにしたら、この2つは同じオブジェクトになる。(実際には同じ ID プロパティを持つオブジェクトを2つ作ることは出来ないので、完全に同じオブジェクトを作ることは出来ない)

 多くの組み込みプロパティは、オブジェクトの外観と動作に影響を与える。例えばボタンには height、width、location プロパティがあるが、これらのプロパティをハンドラから変更すれば、ボタンの見た目が変化する。逆にボタンをドラッグしたりリサイズすれば、それに関連したプロパティが変更される。組み込みのプロパティを使って、スタックのフォントや、カラーや、ウィンドウタイプや、それらの内容を、Revolution アプリケーションと同じようにうまく操作することが出来る。

 オブジェクトの properties プロパティは、そのオブジェクトの持っている組み込みプロパティの名前と値を、配列として持っている。

Global properties:
グローバルプロパティ:
 グローバルプロパティは、アプリケーション全体の動作に影響を与える。これはオブジェクトのプロパティに良く似ているが、特定のオブジェクトには依存しない。

Using the value of a property:
プロパティの値を使う:
 式の中で、値のソースとしてプロパティを使うことが出来る。プロパティの参照は、'the' と、プロパティ名と、'of' と、オブジェクトの参照から構成されている。(グローバルプロパティを除く)

 例えば 'Cancel' ボタンの width プロパティを使うには、このようにする:

  add the width of button "Cancel" to totalWidths
 この文が実行される時、プロパティを参照している部分は、プロパティの値 −このケースではボタン幅のピクセル数− に置き換えられる。

Changing properties:
プロパティを変更する:
 プロパティの値は set コマンドで変えることが出来る。またオブジェクトを選択して Objects メニューの 'Object Properties' を実行すれば、オブジェクトが持っている多くのプロパティを見たり、変更することが出来る。

 プロパティはコンテナではないので、チャンク表現を使ってその一部を変更することは出来ない。プロパティの一部を変えるには、まずプロパティの値を変数に読み込んで、変更したい部分を変数上で操作してから、それを新しい値としてプロパティにセットする:
  put the rect of me into tempRect
  put "10" into item 2 of tempRect
  set the rect of me to tempRect
 いくつかのプロパティは、読むことは出来るが、セットは出来ない。これらをリードオンリー( read-only )プロパティと呼ぶ。

 特定のプロパティについて、それがリードオンリーであるか否か、或いはどんな値を設定できるかなどについては、Transcript Dictionary を参照しなさい。

Property inheritance:
プロパティの継承:
 多くのプロパティはオブジェクトに固有のものであり、オブジェクトの一部としてそのオブジェクトにだけ作用する。しかし backgroundColor や textFont など、オブジェクトのフォントやカラー関連のプロパティでは、上位の階層にあるオブジェクトの設定が適用される。

 例えばフィールドの backgroundColor プロパティが設定されていない場合、そのフィールドのオーナーであるカードの backgroundColor プロパティが使用される。もしカードの backgroundColor も設定されていなければ、スタックの backgroundColor が使われる。これは各オブジェクトのバックグラウンドカラーをいちいち設定しなくても、スタックのバックグラウンドカラーを設定するだけで、全てのオブジェクトのバックグラウンドカラーを自動的に設定できることを意味する。同様にして、foregroundColor、topColor、bottomColor、borderColor、shadowColor、focusColor プロパティや、textFont、textSize、textColor プロパティにも、継承ルールが適用される。

 カラープロパティが設定されていないオブジェクトでは、そのプロパティの値は empty である。カラープロパティが empty 以外に設定されているオブジェクトは、上位のオブジェクト階層から継承するカラーの値を、その値で上書きしていることになる。

 カラープロパティが empty である(つまり他のオブジェクトのカラーを継承している)オブジェクトが実際に使っているカラー情報を得るには、effective キーワードを使う。
  get the effective backgroundColor of field "My Field"

Custom Properties
カスタムプロパティ
 カスタムプロパティは、あなたが作るプロパティである。必要なら多くのカスタムプロパティをオブジェクトに設定することが出来、任意のデータ(バイナリデータでも)をそこに入れることが出来る。カスタムプロパティの値は文字列や配列としてアクセスすることが出来る。

 任意のオブジェクトにカスタムプロパティを設定することが出来るが、カスタムグローバルプロパティは存在しない。

 このような時にカスタムプロパティが利用できる:
* データを特定のオブジェクトに関連付けたい時
* セーブする時にオブジェクトと一緒にデータもセーブしたい時
* データに素早くアクセスしたい時

Using the value of a custom property:
カスタムプロパティの値を使う
 カスタムプロパティは、組み込みのプロパティと同じように参照することが出来る。例えば 'lastCall' というプロパティを使うには、このような文を使う:
  put the lastCall of this card into totalWidths
Changing custom properties:
カスタムプロパティの変更:
 組み込みのプロパティと同じように、プロパティ名と set コマンドを使って、カスタムプロパティの値を変更することが出来る。
  set the myCustomProperty of button 1 to false
Creating a custom property:
カスタムプロパティを作る:
 存在しないカスタムプロパティをセットしようとすると、Revolution は自動的にカスタムプロパティを作って、そこに値をセットする。これは、上にあるような set コマンドを使って、ハンドラやメッセージボックスから、簡単にカスタムプロパティを作ることが出来ることを意味する。

 またオブジェクトのプロパティパレットの Custom タブを使って、カスタムプロパティを見たり、作ったり、削除することが出来る。

Conversion of custom properties:
カスタムプロパティのコンバート:
 スタックを Mac OS や OS X システムから Unix や Windows システムに移動する(あるいはその逆)とき、カスタムプロパティのテキストは、ISO と Macintosh キャラクタセット間の変換が行われない。カスタムプロパティにはテキストだけでなくバイナリデータも入れられるので、もし変換作業を行うとバイナリデータが壊れてしまう。もしカスタムプロパティのデータをテキストとして表示したいなら、そのスタックを使うプラットホーム上で、データの変換作業をしなければならない。

A note about custom property names:
カスタムプロパティ名についての注意:
 カスタムプロパティの名前は、ひとつのワードか、アルファベット、数字、アンダースコア( _ )の組み合わせでなければならない。最初の文字はアルファベットかアンダースコアである必要がある。

 カスタムプロパティに変数と同じ名前を付けることは避けなさい。もし変数と同じ名前のカスタムプロパティを参照しようとすると、Revolution は同名の変数を参照する。通常は予想外の結果が起こるだろう。

 特定のオブジェクトに設定されているカスタムプロパティのリストを得るには、customKeys プロパティを使う。


Organizing Custom Properties
カスタムプロパティをセットで扱う
 いくつかのカスタムプロパティのセットを作って、そのうちのひとつをアクティブにすることが出来る。カスタムプロパティを参照しようとすると、Revolution はそのオブジェクトの「現在アクティブな」カスタムプロパティセットを参照する。カスタムプロパティをセットしようとすると、Revolution は「現在アクティブな」カスタムプロパティセットにそれを追加するか、或いは「現在アクティブな」カスタムプロパティセットの中にあるそのプロパティをセットする。

 一度に使えるカスタムプロパティセットはひとつだけであるので、各セットの中に同じ名前のカスタムプロパティを作って、それぞれに違う値を入れることが出来る。そのプロパティを参照したときに得られる値は、現在どのカスタムプロパティセットがアクティブになっているかによって変わる。

 例えばカスタムプロパティに英語のメッセージを入れてあるとしよう。それを表示するスクリプトはこんな感じになる:
  answer the standardErrorPrompt of this stack
 これは 'standardErrorPrompt' というカスタムプロパティの内容をダイアログボックスに表示している。

 このアプリケーションをフランス語にローカライズするとしよう。これには、カスタムプロパティセットの中に、オリジナルの英語のカスタムプロパティ(これを 'myEnglishStrings' とする)を作ってから、新たにフランス語のプロパティを入れる 'myFrenchStrings' セットを作る。それぞれのセットには同じ名前のプロパティがあるが、片方にはフランス語、もう片方には英語のメッセージを入れる。どちらの言語を使うかをユーザーに選択させて、カスタムプロパティを切り替えれば、
  answer the standardErrorPrompt of this stack
と言う文は 'myEnglishStrings' と 'myFrenchStrings' のどちらのカスタムプロパティがアクティブであっても、それぞれ英語とフランス語をちゃんと表示することが出来る。

 アクティブなカスタムプロパティセットを切り替えるには、使用したいセットの名前をオブジェクトの customPropertySet プロパティに設定する:
  set the customPropertySet of button 3 to "Spanish"
 カスタムプロパティの値をセットする場合と同様、もし指定したカスタムプロパティセットが存在しない場合は、Revolution がそのセットを自動的に作る。

 オブジェクトのカスタムプロパティセットのリストを得るには、customPropertySets プロパティを使う。

 現在のプロパティセットに存在しないプロパティを、プロパティ名をキーとして、カスタムプロパティセットの名前を配列名として、配列表現で参照することが出来る。例えばボタンに 'myProp' というカスタムプロパティがあり、これが 'mySet' というカスタムプロパティセットに入っているとする。どのカスタムプロパティセットがアクティブであっても、下の文を使ってこのカスタムプロパティを参照することが出来る:
  get the mySet["myProp"] of button 1
  set the mySet["myProp"] of the target to 20
A note about property set names:
プロパティセット名についての注意:
 Revolution の開発環境は、多くのアプリケーションユーザーインターフェースを作るために、カスタムプロパティを利用している。これらのプロパティは、'cRev' で始まる名前のプロパティセットに保存されている。

 カスタムプロパティを作る時、それをカスタムプロパティセットに入れないのなら、Revolution のカスタムプロパティについて心配する必要はない。オブジェクトの customPropertySet を変更しない限り、あなたのハンドラがその働きを邪魔することはない。

 しかし、もし repeat ループを使って全てのオブジェクトのカスタムプロパティセットを変更するような使い方をするなら、'cRev' で始まっているプロパティセットはスキップするようにしなければならない。こうすることによって、Revolution が使っているカスタムプロパティを妨害してしまうことを避けることが出来る。


Attaching Handlers to Custom Properties
カスタムプロパティにハンドラを関連付ける
 オブジェクトのカスタムプロパティをセットしようとすると、Revolution はオブジェクトに setProp メッセージを送る。カスタムプロパティの値を読もうとすると、Revolution はオブジェクトに getProp メッセージを送る。

 カスタムプロパティの set や get に対するレスポンスを書くには、オブジェクトのスクリプト、またはメッセージパス上にあるオブジェクトのスクリプトに、setProp や getProp ハンドラを入れる。これらのハンドラについての詳細は、Transcript Dictionary の setProp、getProp を参照しなさい。

 setProp、getProp メッセージが送られてくるのは、カスタムプロパティを読み書きしようとした時だけである。組み込みのプロパティを読み書きする時にはこれらのメッセージは送られて来ない。

邦訳/文責:UDI
2003.01.15
2003.01.16

inserted by FC2 system