展示盒加密這是一個已知的問題,替換顯示框不能在加密中使用,但是我認為我能夠將它們放入關聯數組中並且可以使用。 也許我今天的工作很糟糕。 有沒有人有更好的方式來處理不瀏覽顯示樹的顯示盒加密?另外,這裡還包含一個here或全局變量。
do_something = function ({aa}, {Default Local},
cb = aa["cb2"];
rb = aa["rb"];
show(cb<<CLASS name=""></CLASS>回复:顯示框加密 @vince_faller ,
我在JMP PRO 14.3和15.0上測試了您的腳本,並且可以正常工作。然後,我更改了功能,以使用戶界面變得更加明顯。
我打開了新的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>
回复:顯示框加密文斯-當您加密腳本時,我認為它可能會流出關聯數組中顯示框的文本表示形式。沒有辦法讓它流回並連接到內存中的實際盒子。(這可能並不完全正確;我不知道為什麼需要將它們流式傳輸。)
我的解決方法使用temp = 新名稱空間 ()沒有明確的名稱。將數據添加到創建後的臨時文件中(temp:b1 = box;),然後傳遞temp << G 名稱作為回調的參數。在遠端,使用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,即使您加密了它,它仍然對您有用嗎?
@Craige_Hales ,我之前已經完成了類似Drew的“面向對象的偽對象”樣式的操作。
我遇到的問題是,如果必須動態創建框的副本,則必須保留創建的名稱空間列表,以便以後刪除它們。
而且,如果製作框副本的按鈕(或其他按鈕)沒有與創建主窗口的功能對話,則它不知道要添加到哪個列表。
它非常笨拙,很快。
這可能有點深奧,但我一直都遇到它。
真正讓我感到困惑的是為什麼我可以稱之為<<類名。但如果是文本解釋,則不是<< Set Items。
回复:顯示框加密文斯
抱歉,我錯過了加密部分。
我建議您將腳本嵌入到Script Box()中,然後運行腳本框。然後加密它,它似乎對我有用。
jslbox= ScriptBox("\[
do_something = function ({aa}, {Default Local},
cb = aa["cb2"];
rb = aa["rb"];
show(cb<<CLASS name=""></CLASS>
回复:顯示框加密不幸的是,這將破壞我們所有的單元測試。 由於所有內容都是字符串,因此它也將成為一個夢IGHT。
我將使用它來看看是否可以使用有趣的花絮來發揮自己的優勢。