디스플레이 박스 암호화표시 상자를 대체하는 것이 암호화에서 작동하지 않는 것으로 알려진 문제이지만 해당 배열을 연관 배열에 넣을 수 있다고 생각했습니다. 어쩌면 오늘 직장에서 좀 더 나빴을 수도 있습니다. 누구나 디스플레이 트리를 서핑하지 않는 디스플레이 상자 암호화를 처리하는 더 좋은 방법이 있습니까? here 또는 전역 변수를 보유하는 것도 스타터가 아닙니다.
do_something = function ({aa}, {Default Local},
cb = aa["cb2"];
rb = aa["rb"];
show(cb<<CLASS name=""></CLASS>다시 : 표시 상자 암호화 vince ,
JMP PRO 14.3 및 15.0에서 스크립트를 테스트했으며 작동했습니다. 그런 다음 UI가 변경되고 있음을 더 명확하게하기 위해 기능을 변경했습니다.
테스트를 위해 새로운 JMP 세션을 열었습니다. ??
do_something = function ({aa}, {Default Local},
cb = aa["cb2"];
rb = aa["rb"];
show(cb<<CLASS name="">1,
for(i=1, i<=nitems(ml), i++,
ml[i] = char(num(ml[i]) +1);
),
//else
ml = {"1", "2"}
);
cb << Set Items(EvalList(ml)); // but this doesn't????
);
gen_dummy_cb_ui = Function ({}, {Default Local},
vlb = Vlistbox(
btn = buttonbox("Press me"),
cb1 = Combo Box ({"Change me", "B"}),
cb2 = Combo Box ({"This should change"}),
rb = radiobox({"1", "2"})
);
aa = Associative Array ({"cb1", "cb2", "rb"}, Eval List ({cb1, cb2, rb}));
Eval (Substitute (
Expr (
btn << Set Function (
Function ({this}, {cb},
do_something(DV_AA)
)
);
cb1 << Set Function (
Function ({this, index}, {cb},
do_something(DV_AA)
)
);
)
,
Expr (DV_AA), aa
));
return(vlb);
);
New Window ("",
gen_dummy_cb_ui();
);
</CLASS>
다시 : 표시 상자 암호화Vince-스크립트를 암호화하면 생각한다 아마도 연관 배열에서 디스플레이 상자의 텍스트 표현을 스트리밍하고있을 것입니다. 다시 스트리밍하여 메모리의 실제 상자에 연결하는 방법은 없습니다. (정확하지 않을 수도 있습니다. 왜 스트리밍해야하는지 모르겠습니다.)
내 해결 방법은 temp = NewNameSpace 명시적인 이름이없는 (). 생성 후 temp에 데이터를 추가 (temp : b1 = box;) 한 다음 temp << G를 전달합니다. etName 콜백의 매개 변수로 맨 끝에 temp =를 사용하십시오. 네임 스페이스 네임 스페이스를 다시 가져 오려면 (passedName) 마지막으로 닫힘 네임 스페이스를 삭제하는 창에 핸들러를 추가하십시오.
명명되지 않은 네임 스페이스는 "# 37"과 같은 내부 이름을 얻습니다.
따라서 대략 다음과 같습니다.
do_something = Function( {ns},
{Default Local},
Show( ns );
ns = Namespace( ns );
Show( ns );
cb = ns:cb2;
rb = ns:rb;
Show( cb << class name ); // this works
cb << Set Items( {"1", "2"} ); // but this doesn't????
);
gen_dummy_cb_ui = Function( {},
{Default Local},
vlb = V List Box(
btn = Button Box( "Press me" ),
cb1 = Combo Box( {"Change me", "B"} ),
cb2 = Combo Box( {"This should change"} ),
rb = Radio Box( {"1", "2"} )
);
//aa = Associative Array( {"cb1", "cb2", "rb"}, Eval List( {cb1, cb2, rb} ) );
temp = New Namespace();
temp:cb1 = cb1;
temp:cb2 = cb2;
temp:rb = rb;
Eval(
Substitute(
Expr(
btn << Set Function(
Function( {this},
{cb},
Show( "btn" );
do_something( DV_NS );
)
);
cb1 << Set Function(
Function( {this, index},
{cb},
Show( "cb1" );
do_something( DV_NS );
)
);
),
Expr( DV_NS ), temp << getname
)
);
Return( Eval List( {vlb, temp << getname} ) );
);
{box, ns} = gen_dummy_cb_ui();
New Window( "", box );
Eval(
Eval Expr(
box << onclose(
Delete Namespaces( Expr( ns ) );
1;
)
)
);
Show( Namespace( ns ) );다시 : 표시 상자 암호화@ gzmorgan0, 암호화 한 후에도 효과가 있었습니까?
@ Drew의 Pseudo Object Oriented 스타일과 비슷하기 전에이 작업을 수행했습니다.
내가 겪는 문제는 상자의 사본을 동적으로 작성 해야하는 경우 나중에 삭제하기 위해 작성된 네임 스페이스 목록을 유지해야한다는 것입니다.
그리고 상자의 사본을 만드는 버튼 (또는 그 무엇이든)이 기본 창을 만드는 기능과 대화하지 않으면 추가 할 목록을 모릅니다.
그것은 매우 빨리 혼란스러워집니다.
이것은 조금 난해하지만, 나는 항상 그것에 부딪칩니다.
정말 혼동되는 것은 << 클래스 이름을 호출 할 수있는 이유입니다. 그러나 텍스트 해석으로 보이면 << Set Items가 아닙니다.
다시 : 표시 상자 암호화빈스,
암호화 부분이 누락되었습니다.
스크립트 상자 ()에 스크립트를 포함시키고 스크립트 상자를 실행하는 것이 좋습니다. 그런 다음 그것을 암호화하십시오. 그것은 나를 위해 일하는 것 같습니다.
jslbox= ScriptBox("\[
do_something = function ({aa}, {Default Local},
cb = aa["cb2"];
rb = aa["rb"];
show(cb<<CLASS name=""></CLASS>
다시 : 표시 상자 암호화불행히도 모든 단위 테스트가 중단됩니다. 또한 모든 것이 문자열이기 때문에 지원하기 위해 NIGHTMARE가 될 것입니다.
나는 그것으로 놀고 내가 재미있는 tidbit를 나의 이점으로 사용할 수 있는지 알아볼 것이다.