スクリプトで書かれたユーティリティやロールアウトで定義したローカル コンポーネントは、そのユーティリティやロールアウト オブジェクトのプロパティとして外部コードからのアクセスが可能です。このオブジェクトがユーティリティやロールアウト定義上で命名された新規のグローバル変数(ネストされたロールアウトの場合はローカル変数)に割り当てられます。
例:
|
utility foo "Utility"
(
local var1, var2
checkbox enable "Enable"
rollout setup "Setup" -- ローカル ロールアウト
(
local var3
button doit "Execute" enabled:false
on doit pressed do
(
var3 = var1 + var2
)
) -- ロールアウト終了
function frab a b = (var1 = b-a; var2 = a*b)
on enable changed state do
(
frab 10 20
if state then
(
addRollout setup
setup.doit.enabled = true
)
else
removeRollout setup
) -- on enable ハンドラ終了
) -- ユーティリティを終了します。
|
この例では、ユーティリティを定義して、
foo
と命名されたグローバル変数内にユーティリティ オブジェクトを配置します。ユーティリティ内のコンポーネントには、リスナーや他のコードからオブジェクトのプロパティとしてアクセスできます。 プロパティ名としては、変数やアイテム名を使用します。プロパティ名としてイベント名を使用すると、ユーザ
インタフェースにおけるすべてのイベント ハンドラ関数にも、アイテムのサブプロパティとしてアクセスできます。
例:
|
-- foo のローカル変数、var1 を取得して出力します。
print foo.var1
|
-- foo の許可チェックボックスの状態をテストします。
if foo.enable.state then print "ON!" else print "OFF"
|
-- foo の許可チェックボックスの状態を false に設定します。
-- これによりチェックボックスが変化しますが、
-- ローカル ロールアウトの追加/削除を処理するイベント ハンドラは実行されません。
foo.enable.state = false
|
-- 許可チェックボックスの 'changed' ハンドラ関数を呼び出します。
-- これにより false の値でハンドラが呼び出されますが、
-- チェックボックスの状態自体は変化しません。
foo.enable.changed false
|
-- 以下のコードでは、false の値でハンドラが呼び出され、
-- さらに UI およびマウスでのチェックボックスの変更と同じように、
-- チェックボックスの状態も変化します。
foo.enable.changed (foo.enable.state = false)
|
-- foo ユーティリティのローカルの 'frab' 関数を呼び出します。
foo.frab 100 200
|
-- foo のセットアップ ロールアウトのローカル変数、var3 を設定します。
foo.setup.var3 = 42
|
-- foo ユーティリティのセットアップ ロールアウトの[doit]ボタンに対して
-- 変更ハンドラ関数を呼び出します。
foo.setup.doit.pressed()
|
スクリプト ユーティリティとロールアウト ユーティリティのローカル変数、関数、構造体は、ユーティリティやロールアウトが初めて表示されるときではなく、初めて定義されるときに初期化されます。これにより、定義後は他のコードがローカル関数を使ってローカル値にアクセスできるようになります。
注:
ユーティリティまたはロールアウトを開くたびに、すべてのローカル値が再初期化され、開く前に設定された値はすべて失われてしまいます。
例:
|
-- 値が 50.0 に初期化された編集ボックスの UI 要素と
-- 2 つのローカル変数を使用して、テスト ロールアウトを定義します。
rollout test "Test"
(
localtestValue1
localtestValue2 = 10
spinner testSpinner "Spinner" range:[0.0,100.0,50.0]
)
--> Rollout:test
test.testSpinner.value -- スピナーの値を表示してみます。 value
--> 50.0 -- 予想どおり 50 です。
test.testValue1 -- 最初のローカル変数の値を取得します。
--> undefined -- 黙示的に undefined に設定されています。
test.testValue2 -- その他のローカル変数の値を取得します。
--> 10 -- 予想どおり 10 に設定されています。
test.testSpinner.value = 60.0 -- スピナーの値を 60.0 に変更します。
--> 60.0
test.testSpinner.value -- 値をもう一度取得して、正しく動作していることを確認します。
--> 60.0
test.testValue1 = 20 -- 最初のローカルの値を 20 に設定します。
--> 20
test.testValue1 -- 最初のローカルの値を取得します。
--> 20 -- 20 に初期化されています。
test.testValue2 = 40 -- 2 番目のローカルの値を 40 に設定します。
--> 40
test.testValue2 -- 2 番目のローカルの値を取得します。
--> 40 -- 40 になっています。
-- ここで、ロールアウトを使用してダイアログ ボックスを作成します。
createDialog test 100 40
-- すべての変数がリセットされます。
--> true
test.testSpinner.value -- スピナーの値をもう一度取得します。
--> 50.0 -- 既定値の 50.0 に戻っています。
test.testValue1 -- 最初のローカルの値を再度取得します。
--> undefined -- undefined に戻っています。
test.testValue2 -- 2 番目のローカルの値を再度取得します。
--> 10 -- 10 に戻っています。
|