質問:
ボタンと進行状況バーを備えた UI を作成しました。進行状況バーは、実際には、使用状況を示す小さなカラー インジケータとして使用されています。見つかったファイルに応じて進行状況バーの色を変更したいと考えています。
ところが、進行状況バーを含んだロールアウトを作成した後に配色しても、「undefined」と表示されてしまいます。進行状況バーを作成した後でも、収集したデータに基づいて、その進行状況バーの色を変更する必要があります。
回答:
何らかの進行状況バーを含んだ UI ロールアウトを作成しているとします。
macroScript TestUI category:"MXS Help"
(
-- マクロ スクリプト自体がスコープを定義します。
rollout testUI_Rollout"Testing..."
(
progressbar Indicator01 width:20 height:20 color:green value:100
)
createDialog testUI_Rollout 100 100
)
|
Indicator01 にアクセスするには次の 3 つの方法があります。
-
ロールアウト内部
-
ロールアウトの作成前
-
ロールアウトの作成後
1. これは明白であり、ここでは説明しません。
2. この方法は、まだ定義されていないが、少なくとも事前に初期化された値にアクセスできるので興味深い点があります。
macroScript TestUI category:"MXS Help"
(
local testUI_Rollout
-- これは変数を定義します。
-- メモリ アドレスがありますが、まだ有効な値ではありません。
-- 変数にアクセスする関数を作成した場合は、
-- この変数を認識して評価が行われ、
-- 有効なロールアウトとみなされます。後で、スクリプトが実際に実行されると、
-- その変数が有効なロールアウトを実際に示します。
--したがって、問題はありません。
fn changeTheLamp theColor =
(
testUI_Rollout.Indicator01.color = theColor
-- 関数はロールアウト コンテキストの外部にあります。
-- したがって、UI 要素へのアクセスにプレフィックスを使用する必要があります。
)
-- このロールアウトは、ロールアウトにランプを備える前であっても定義されます。
-- この場合も、上記の関数を使用すると
-- ランプを黄色に変更することができます。
rollout Changer_Rollout"Testing..."
(
button changeIt"CHANGE STATE"
on changeIt pressed do changeTheLamp [255,255,0]
)
rollout testUI_Rollout"Testing..."
(
progressbar Indicator01 width:20 height:20 color:green value:100
)
createDialog Changer_Rollout 100 30 100 100
createDialog testUI_Rollout 100 100 100 200
)
|
3. ダイアログ ボックスを作成した後に、Indicator01 の値にアクセスするか、その色を変更する必要があるとします。この場合、変数 TestUi_Rollout がロールアウト定義を示しているので、Indicator01 にアクセスするには、次のようにこのロールアウト名を
Indicator01 の前に記述する必要があります。
macroScriptTestUI category:"MXS Help"
(
-- マクロ スクリプト自体がスコープを定義します。
rollout testUI_Rollout "Testing..."
(
progressbar Indicator01 width:20 height:20 color:green value:100
)
createDialog testUI_Rollout 100 100
TestUI_rollout.Indicator01.color = red
)
|
この行は、TestUI_rollout が見えているマクロ スクリプトのスコープ内部に記述されています。このロールアウトに別のスクリプトからアクセスする場合は、このロールアウトをグローバル変数として定義する必要があります。
macroScript TestUI category:"MXS Help"
(
global testUI_Rollout --ロールアウトは外部の誰でも見ることができるようになります。
rollouttestUI_Rollout"Testing..."
(
progressbar Indicator01 width:20 height:20 color:green value:100
)
createDialog testUI_Rollout 100 100
)
macroScrip tChangeStatusTestUI category:"MXS Help"
(
TestUI_rollout.Indicator01.color = red
)
|
最初のマクロを実行すると、緑のライトを備えたロールアウトが表示されます。
2 番目のマクロを実行すると、ライトが赤に変わります。
ご覧のように、それぞれのロールアウトを、見えるように上位のスコープでローカルまたはグローバル変数として定義していれば、どこからでもすべてのロールアウトにアクセスできます。さらに便利なことには、実際の内容を定義する前に変数を宣言でき、定義される時点よりも前の時点でそれらにアクセスすることができます。