問題
多くの場合、スライダー ボックスを使用して数値変数を制御する場合、編集可能な数値ディスプレイに変数の値を表示して、変数の値を手動で設定できるようにする必要があります。
これを行う現在の方法は、Number Edit Box() と Slider Box() の 2 つの表示オブジェクトを作成することです。それらが接続されるようにコーディングする必要があります。さらに、数値編集ボックスが (<
これらのオブジェクトの作成方法とそれらを接続する方法に関するスクリプト ガイドを読むのに、多くの時間を取らなければならないことがよくあります。 (このような組み込みの JMP 表示オブジェクトがあればいいのに)
解決
両方の表示ボックスを一緒に作成する評価式を作成する関数 SliderNumberEditBox() を作成しました。 これらのディスプレイ ボックスは、上記のように接続されます。Number Edit Box への参照、Number Edit Box の初期値、Slider Box への参照、スライダー ボックスの上限と下限の範囲、スライダーによって制御される変数を定義する文字列を引数として取ります。ボックス、および必要に応じて、数値編集ボックスが手動で更新されたときに実行する式と、スライダー ボックスが変更されたときに実行する式を指定します。(式は文字列として定義する必要があり、文字列内で引用する予約文字には適切なエスケープ シーケンスを使用する必要があることに注意してください)。
SliderNumberEditBox = Function( {nebref, nebinitval, sbref, sblower, sbupper, sbvar, nebFunction = "", sbFunction = ""},
Eval(
Parse(
"H List Box(" || nebref || " = Number Edit Box(" || nebinitval || ",
<<SET function=""></SET>この関数は文字列連結を使用して、表示ボックス用の式の文字列バージョン全体を作成し、文字列を式に解析して、評価された式を返します。
構文
SliderNumberEditBox(数値編集ボックスへの参照用の文字列、数値編集ボックスの初期値の文字列、スライダー ボックスへの参照用の文字列、スライダーの下限の文字列、スライダーの上限の文字列、スライダーによって制御される変数の文字列、 <数値編集ボックスを手動で変更したときに評価したい式の文字列表現> 、 <スライダー ボックスが変更されたときに評価する式の文字列表現> )
k = 1;
SliderNumberEditBox(
"_neb1",
Char( k ),
"_sb1",
"0",
"2",
"k")
以下の評価された式を返します
H List Box(
_neb1 = Number Edit Box(
0.5,
<<SET function=""></SET>
例
SliderNumberEditBox = Function( {nebref, nebinitval, sbref, sblower, sbupper, sbvar, nebFunction = "", sbFunction = ""},
Eval(
Parse(
"H List Box(" || nebref || " = Number Edit Box(" || nebinitval || ",
<<SET function=""></SET>このようなウィンドウを作成します (スライダー ボックスを別の値に変更しました)

Eval/Eval Expr を使用した良い例をコミュニティで探していたときに、これに遭遇し、文字列連結ではなく式構築を使用する SliderNumberEditBox 関数の実装を共有したいと考えました。
関数に渡される引数の多くは文字列ではなくなり、変数が存在する名前空間の名前を提供するためのオプション nsName 引数が追加されました (デフォルトはグローバル)。
SliderNumberEditBox = Function( {nebref, nebinitval, sbref, sblower, sbupper, sbvar,
nsName = "global", nebFunction = Expr(), sbFunction = Expr()},
Eval( // evaluate to create the diplay boxes
Eval Expr( // evaluate everything wrapped with Expr()
H List Box(
// Create the Number Edit Box
// As Scoped() is used when the variable names are to be dynamic
As Scoped( Expr( nsName ), Expr( nebref ) ) = Number Edit Box(
Expr( nebinitval ),
<<SET function=""></SET>
表現構築についてもっと興味のある人はチェックしてみてください。 @ihさんの JSL クックブックへの投稿: Eval Insert、Eval Expr、Parse、および Substitute を使用して、ある式を別の式に挿入します。
Slider Box() に接続された Number Edit Box() を持つオプションがあること、またはこの機能を実行する新しい表示オブジェクトが作成されることを「JMP ウィッシュ リスト」に追加する必要があるかどうかはわかりません。
いいね! テキスト ボックスを再作成せずに内容を設定できるため、例が読みやすくなります。
k = 1;
_nw = New Window( "Slider Number Edit Box",
_vlb = V List Box(
SliderNumberEditBox(
"_neb1",
Char( k ),
"_sb1",
"0",
"2",
"k",
"_tb << settext(\!"The number is \!" || char(k))",
"_tb << settext(\!"The number is \!" || char(k))"
),
_tb = Text Box( "The number is " || Char( k ) )
)
);