公開日: 11/25/2021

Set FunctionとSet Script

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 ScriptSet Functionの各メッセージは、Button Box、Calendar Box、Check Box、Combo Box、List Box、Popup Box、Radio Box、Range Slider Box、Slider Box、Spin Boxに対応します。

Set ScriptSet Functionは同時に使用できません。特定のディスプレイボックスを参照する場合は、Set Functionを使用してください。

より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).