ディスプレイボックスの暗号化暗号化ではディスプレイボックスの代用が機能しないことは既知の問題ですが、連想配列にそれらを配置することができ、それは機能すると思いました。 たぶん、今日の仕事はひどいです。 誰かがディスプレイツリーをサーフィンしていないディスプレイボックスの暗号化を処理するより良い方法を持っていますか?また、ここまたはグローバル変数を保持することは重要ではありません。
do_something = function ({aa}, {Default Local},
cb = aa["cb2"];
rb = aa["rb"];
show(cb<<CLASS name=""></CLASS>Re:ディスプレイボックスの暗号化 @vince_faller 、
私は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>
Re:ディスプレイボックスの暗号化Vince-スクリプトを暗号化すると、私は思うおそらく、連想配列の表示ボックスのテキスト表現をストリーミングしています。それをストリーミングしてメモリ内の実際のボックスに接続する方法はありません。(これは正確ではない可能性があります。ストリーミングする必要がある理由はわかりません。)
私の回避策はtemp =を使用します NewNameSpace ()明示的な名前なし。作成後にtempにデータを追加し(temp:b1 = box;)、temp << Gを渡します etName コールバックのパラメータとして。遠端では、temp =を使用します名前空間 (passedName)を使用して名前空間を取り戻します。最後に、 OnClose 名前空間を削除するウィンドウへのハンドラ。
名前のない名前空間は、「#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 ) );Re:ディスプレイボックスの暗号化@ gzmorgan0、暗号化した後でも機能しましたか?
あずきっく 、私は以前にそれをDrewの疑似オブジェクト指向スタイルと同様に行いました。
私が遭遇する問題は、ボックスのコピーを動的に作成する必要がある場合、後で削除するために作成した名前空間のリストを保持する必要があることです。
また、ボックスのコピーを作成するボタン(またはそれが何であれ)がメインウィンドウを作成する関数と通信していない場合は、追加するリストがわかりません。
それは非常にすぐに無愛想になります。
これは少し難解かもしれませんが、私はいつもそれに遭遇します。
本当に私を混乱させるのは、なぜ<<クラス名>と呼ぶことができるのかです。しかし、テキストの解釈と見なされている場合は、<< Set Itemsではありません。
Re:ディスプレイボックスの暗号化ビンス
申し訳ありませんが、暗号化の部分を逃しました。
スクリプトをScript Box()に埋め込み、スクリプトボックスを実行することをお勧めします。次に、それを暗号化します。私にとってはうまくいくようです。
jslbox= ScriptBox("\[
do_something = function ({aa}, {Default Local},
cb = aa["cb2"];
rb = aa["rb"];
show(cb<<CLASS name=""></CLASS>
Re:ディスプレイボックスの暗号化残念ながら、それはすべてのユニットテストを壊します。 また、すべてが文字列であるため、サポートするのはナイトメアになります。
私はそれをいじって、興味深い一口を自分の有利に利用できるかどうかを確認します。