展示盒加密这是一个已知的问题,替换显示框不能在加密中使用,但是我认为我能够将它们放入关联数组中并且可以使用。 也许我今天的工作很糟糕。 有没有人有更好的方式来处理不浏览显示树的显示盒加密?另外,这里还包含一个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。
我将使用它来看看是否可以使用有趣的花絮来发挥自己的优势。