Cifrado de cuadro de pantallaEs un problema conocido que la sustitución de cuadros de visualización no funciona en el cifrado, pero pensé que podía ponerlos en matrices asociativas y funcionaría. Tal vez hoy estoy muy mal en mi trabajo. ¿Alguien tiene una mejor manera de lidiar con el cifrado de displaybox que NO está navegando por el árbol de visualización? También mantener una variable aquí o global es un no iniciador.
do_something = function ({aa}, {Default Local},
cb = aa["cb2"];
rb = aa["rb"];
show(cb<<CLASS name=""></CLASS>Re: Cifrado de cuadro de visualización @vince_faller ,
Probé su script en JMP PRO 14.3 y 15.0 y funcionó. Luego cambié la función para hacer más evidente que la IU estaba cambiando.
Abrí nuevas sesiones de JMP para probar. ??
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>
Re: Cifrado de cuadro de visualizaciónVince: cuando encriptas el script, yo pensar probablemente esté transmitiendo la representación de texto de los cuadros de visualización en la matriz asociativa. No hay forma de que vuelva a transmitirse y se conecte a las cajas reales en la memoria. (Eso puede no ser exactamente correcto; no sé por qué necesita transmitirlos).
Mi solución utiliza temp = NewNameSpace () sin nombre explícito. Agregue los datos a temp DESPUÉS de la creación (temp: b1 = box;), luego pase temp << G etName como el parámetro para las devoluciones de llamada. En el otro extremo, use temp = NameSpace (passName) para recuperar el espacio de nombres. Finalmente, agregue un OnClose controlador a la ventana para eliminar el espacio de nombres.
Los espacios de nombres sin nombre obtienen un nombre interno, como "# 37".
Entonces, más o menos así:
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 ) );Re: Cifrado de cuadro de visualización@ gzmorgan0, ¿Funcionó para ti incluso después de que lo cifraste?
@Craige_Hales , Lo he hecho antes de manera similar al estilo orientado a pseudo objetos de Drew.
El problema con el que me encuentro es que si tengo que crear una copia de un cuadro dinámicamente, tengo que mantener una lista de espacios de nombres creados para eliminarlos más tarde.
Y si el botón (o lo que sea) que hace la copia del cuadro no está hablando con la función que crea la ventana principal, no sabe a qué lista agregar.
Se pone muy fangoso muy rápidamente.
Esto puede ser un poco esotérico, pero me encuentro con él todo el tiempo.
Lo que REALMENTE me confunde es por qué puedo llamar << Nombre de la clase. Pero no << Establecer elementos, si se ve como una interpretación de texto.
Re: Cifrado de cuadro de visualizaciónVince
Lo siento, me perdí la parte de cifrado.
Le sugiero que incruste su secuencia de comandos en un Cuadro de secuencia de comandos () y ejecute el cuadro de secuencia de comandos. Luego encriptarlo, parece funcionar para mí.
jslbox= ScriptBox("\[
do_something = function ({aa}, {Default Local},
cb = aa["cb2"];
rb = aa["rb"];
show(cb<<CLASS name=""></CLASS>
Re: Cifrado de cuadro de visualizaciónDesafortunadamente, eso rompería todas nuestras pruebas unitarias. También lo haría un PESADILLA compatible, ya que todo es una cadena.
Jugaré con él para ver si puedo usar información interesante para mi ventaja.