公開日: 04/01/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 changing item=" || (this << Get Items())[idx] || " to " || Char(
 

// <<Getはその項目の新しい値を戻す

	this << Get( idx ) ) ||
		"\!n new selection=" || 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の例は、同じ関数を使ってボタンのアクションを定義しています。

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).