Chiffrement de la boîte d'affichageC'est un problème connu que le remplacement des boîtes d'affichage ne fonctionne pas en cryptage, mais je pensais que je pouvais les mettre dans des tableaux associatifs et cela fonctionnerait. Peut-être que je suis juste très mauvais dans mon travail aujourd'hui. Quelqu'un a-t-il une meilleure façon de gérer le chiffrement de la boîte d'affichage qui ne surfe PAS sur l'arborescence d'affichage? Une variable ici ou globale est également non-starter.
do_something = function ({aa}, {Default Local},
cb = aa["cb2"];
rb = aa["rb"];
show(cb<<CLASS name=""></CLASS>Re: Chiffrement de la boîte d'affichage @vince_faller ,
J'ai testé votre script sur JMP PRO 14.3 et 15.0 et cela a fonctionné. J'ai ensuite changé la fonction pour qu'il soit plus évident que l'interface utilisateur était en train de changer.
J'ai ouvert de nouvelles sessions de JMP pour tester. ??
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: Chiffrement de la boîte d'affichageVince - lorsque vous cryptez le script, je pense il diffuse probablement la représentation textuelle des boîtes d'affichage dans le tableau associatif. Il n'y a aucun moyen pour que cela soit retransmis et connecté aux boîtes réelles en mémoire. (Ce n'est peut-être pas tout à fait vrai; je ne sais pas pourquoi il faut les diffuser.)
Ma solution de contournement utilise temp = NewNameSpace () sans nom explicite. Ajoutez les données à temp APRÈS la création (temp: b1 = box;), puis passez temp << G etName comme paramètre pour les rappels. À l'autre bout, utilisez temp = NameSpace (PassedName) pour récupérer l'espace de noms. Enfin, ajoutez un OnClose gestionnaire à la fenêtre pour supprimer l'espace de noms.
Les espaces de noms sans nom obtiennent un nom interne, comme "# 37".
Donc, à peu près comme ceci:
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: Chiffrement de la boîte d'affichage@ gzmorgan0, Cela a fonctionné pour vous même après l'avoir chiffré?
@Craige_Hales , Je l'ai fait avant similaire au style Pseudo Object Oriented de Drew.
Le problème que je rencontre est que si je dois créer une copie d'une boîte dynamiquement, je dois garder une liste des espaces de noms créés afin de les supprimer plus tard.
Et si le bouton (ou quoi que ce soit) qui fait la copie de la boîte ne parle pas à la fonction qui crée la fenêtre principale, il ne sait pas à quelle liste ajouter.
Il devient très lourd très rapidement.
Cela peut être un peu ésotérique, mais je le rencontre tout le temps.
La chose qui me confond vraiment, c'est pourquoi puis-je appeler << Nom de classe. Mais pas << Set Items, s'il s'agit d'une interprétation de texte.
Re: Chiffrement de la boîte d'affichageVince,
Désolé d'avoir raté la partie cryptage.
Je vous suggère d'incorporer votre script dans une boîte de script () et d'exécuter la boîte de script. Ensuite, cryptez-le, cela semble fonctionner pour moi.
jslbox= ScriptBox("\[
do_something = function ({aa}, {Default Local},
cb = aa["cb2"];
rb = aa["rb"];
show(cb<<CLASS name=""></CLASS>
Re: Chiffrement de la boîte d'affichageMalheureusement, cela briserait tous nos tests unitaires. De plus, cela en ferait un NIGHTMARE à supporter car tout est une chaîne.
Je vais jouer avec pour voir si je peux utiliser des friandises intéressantes à mon avantage.