外部コードからロールアウトのローカルおよび他の項目へのアクセス
 
 
 
 

   

ユーザ インタフェースの作成 - クイック ナビゲーション

スクリプトで書かれたユーティリティやロールアウトで定義したローカル コンポーネントは、そのユーティリティやロールアウト オブジェクトのプロパティとして外部コードからのアクセスが可能です。このオブジェクトがユーティリティやロールアウト定義上で命名された新規のグローバル変数(ネストされたロールアウトの場合はローカル変数)に割り当てられます。

例:

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 に戻っています。