Set Scriptメッセージを使って、ディスプレイボックスのコントロール(Button BoxやCombo Box)がクリックされたときにスクリプトを実行させることができます。
win = New Window( "Set Scriptの例",
ex = Button Box( "クリックしてください" )
);
ex << Set Script( Print( "クリックされました" ) );
上のスクリプトは、ボタンボックスがクリックされたときに、次のテキストをログに出力します。
"クリックされました"
または、Set Functionメッセージを使うと、ディスップレイボックスのコントロールに、ある特定の関数を実行させることができます。この関数の最初の引数はそのディスプレイボックスを表します。Set Functionを使うと、よりオブジェクト指向なプログラミングができ、大きなプログラムの作成する時に役立ちます。
win = New Window( "Set Functionの例",
Button Box( "クリックしてください",
// Set Functionで指定した関数が'this'ディスプレイボックスを取得する
<< Set Function(
Function(
{this},
this << Set Button Name( "ありがとう" )
)
)
)
);
上のスクリプトは、「クリックしてください」という名前のButtton Boxを作成します。このボタンがクリックされたとき、Set Functionによって呼び出された関数がボタンの名前を「ありがとう」に変更します。
同じスクリプトで複数のボタンを操作したい場合、Set Functionを使うとSet Scriptより簡単です。なぜなら、Set Functionは送り先を記述しないで済むからです。次の例では、どちらのチェックボックスも、1行目で定義されている関数を呼び出します。
f = Function( {this, idx}, // idxを変更
Write(
/* <<Get Itemsはすべての項目を戻す。リスト内でidxが付いたものは
変更された項目の名前 */
"\!n 変更された項目=" || (this << Get Items())[idx] || " to " || Char(
// <<Getはその項目の新しい値を戻す
this << Get( idx ) ) ||
"\!n 選択されている項目=" || Char( this << Get Selected ) || "\!n"
)// <<Get Selectedは現在チェック(選択)されている項目のリストを戻す
);
New Window( "例",
H List Box( // f'は名前付き関数、ここでは2回使用されている
V List Box( Text Box( "Column 1" ), Check Box( {"a", "b"}, <<Set Function( f ) ) ),
Spacer Box( size( 50, 50 ) ),
V List Box( Text Box( "Column 2" ), Check Box( {"c", "d"}, <<Set Function( f ) ) )
)
);
次に紹介するSet Functionの例は、同じ1つの関数を使ってボタンのアクションを定義しています。
New Window( "貯金箱",
V List Box(
H Center Box( TB = Text Box() ), // TBがコインの金額の合計を表示
LB = Lineup Box( N Col( 3 ) ), // LB が、ボタンを整列させる
H Center Box( // 「クリア」ボタンが金額をリセット
Button Box( "クリア",
total = 0;
TB << Set Text( Char( total ) );
)
)
)
);
coins = {1, 5, 10, 25, 50, 100}; // coinsはボタンのラベルを持つリスト
total = 0;
/* ループがボタンを作成し、
それぞれに同じ関数が使用される */
For( iButton = 1, iButton <= N Items( coins ), iButton++,
LB << Append( Button Box( Char( coins[iButton] ), Set Function( buttonFunction ) ) )
);
buttonFunction = Function( {this},
total = total + Num( this << Get Button Name );
TB << Set Text( Char( total ) );
);
「クリア」以外のボタンをクリックした時に呼び出される関数は、ボタンの名前からアクションを定義しています。ボタン名を使う代わりに、兄弟のディスプレイボックスを用いて、this<<sibまたは(this<<parent)<<childでこのボタンの最初の兄弟を見つけることもできます。
メモ:
• Set ScriptとSet Functionの各メッセージは、Button Box、Calendar Box、Check Box、Combo Box、List Box、Popup Box、Radio Box、Range Slider Box、Slider Box、Spin Boxに対応します。
• Set ScriptとSet Functionは同時に使用できません。特定のディスプレイボックスを参照する場合は、Set Functionを使用してください。