문제
많은 상황에서 슬라이더 상자를 사용하여 숫자 변수를 제어할 때 변수 값을 표시하고 수동으로 변수 값을 설정할 수 있는 편집 가능한 숫자 디스플레이가 필요합니다.
이를 수행하는 현재 방법은 숫자 편집 상자()와 슬라이더 상자()라는 두 개의 표시 객체를 만드는 것입니다.연결되도록 코딩해야 합니다.또한 숫자 편집 상자가 수동으로 입력한 값의 변경 사항과 상호 작용하는 방식( <
이러한 개체를 만들고 연결하는 방법에 대한 스크립팅 가이드를 읽는 데 많은 시간을 할애해야 하는 경우가 많습니다. (이와 같은 내장 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 ) )
)
);