JSL: 動的表示ボックスのPanelBoxサイズを復元する<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Panel Box() オブジェクトは、コンテンツが拡大するにつれてサイズを自動的に調整します。 しかし、その逆は真実ではないようです。 右のラジオ ボタンを押す 以下のスクリプト例では、チェックボックスの記述子が拡張されるとウィンドウが拡張されます。 左側のラジオ ボタンを再度選択すると、記述子は短くなりますが、パネル ボックス (およびウィンドウ) は展開された状態を維持します。
パネル ボックスを強制的に元のサイズに戻すにはどうすればよいですか? それとも、この点でより「スマート」な別のディスプレイボックスタイプはありますか?
元のサイズを変数に保存し(pb1 << Get Size を使用)、ラジオボタン 1 が再選択されたときにそれを適用しようとしましたが、Panel Box() は Set Size() メッセージを認識していないようです。
str =
{ 「ケース 1: 低用量 非常に長い説明 非常に長い説明 非常に長い説明」 、
「ケース 2: 高用量 非常に長い説明 非常に長い説明 非常に長い説明」
} ;
short_str =評価リスト( {左( str [ 1 】 、 6 ) 、左( str [ 2 】 、 6 )} ) ;
pb1 =式(パネルボックス( 、
hlb1 = V リストボックス( TB =テキストボックス( 「ケースを選択」 ) 、
CB =チェックボックス( short_str ) 、
vlb1 = V リストボックス(
スペーサーボックス() 、
H リストボックス(
rb2 =ラジオボックス(
「番組名」 、
CB <<消去;
vlb1 <<先頭に追加する( CB =チェックボックス( short_str ))) 、
rb1 =ラジオボックス(
「説明を表示」 、
CB <<消去;
vlb1 <<先頭に追加する( CB =チェックボックス( str )))))))
) ;
pb2 =エクスプレッション(
パネルボックス( 、
V リストボックス(
ボタンボックス( "走る" ) 、
ボタンボックス( "キャンセル" 、 <<ウィンドウを閉じる) 、
スペーサーボックス()
))) ;
新しい窓( "例" 、
HLB = H リストボックス( pb1 、 pb2 )
) ;
rb2 <<グループ( rb1 ) ;
JSL: 動的表示ボックスのPanelBoxサイズを復元するありがとうデイブ! それは動作します。 set window size() の代わりに set content size() を使用して同様の解決策を検討しました。 少なくともこの例では、コマンドは互換性があるようです。
まだちょっとした癖があります。 2 つのラジオ ボタンを切り替えると、ウィンドウ設定は 2 回または 3 回ごとに失敗します。 ウィンドウはその内容よりも小さくなります。 この問題は、あなたのソリューションと私のソリューションの両方で発生します。 これは、コード実行における非同期の結果であると思います。たとえば、prepend() が完了する前にウィンドウ サイズがフェッチされるなどです。 ただし、rb1 ボタンのスクリプトに Wait(0.01) を挿入すると、奇妙な動作が解消されるようです。 以下の抜粋を参照してください。
おそらくこれはマシン固有のものであるため、この奇妙な現象がすべての人に起こるわけではないかもしれません。 私はかなり高速な Mac Pro で JMP 9.02 を実行しています。
...If (NItems(ss_large)==0, Wait(0.01);
ss_large = nw << ウィンドウ サイズを取得
、
nw << ウィンドウ サイズを設定(ss_large[1],ss_large[2])
)...
再度、感謝します!
Re: JSL: 動的表示ボックスのPanelBoxサイズを復元する問題は特にパネル ボックスにあるわけではないと思います。パネル ボックスを取り外しても同じ問題が発生します。
コンテンツに合わせてサイズを拡大するのはウィンドウ自体です。
したがって、ウィンドウにサイズ変更を適用すると、あなたが提案した解決策は機能します。ただし、ウィンドウのサイズを変更すると、それ自体はサイズ変更されないため、ウィンドウを大きくしたり小さくしたりするには、サイズ変更を制御する必要があります。
このコードは機能するようです...
str = {"ケース 1: 低用量の場合、非常に長い説明、非常に長い説明、非常に長い説明",
"ケース 2: 高用量、非常に長い説明、非常に長い説明、非常に長い説明"};
short_str = Eval List( {Left( str[1], 6 ), Left( str[2], 6 )} );
ss_small = {};
ss_large = {};
pb1 = Expr(
ボーダーボックス( ,
hlb1 = V リスト ボックス(
tb = テキスト ボックス( "ケースを選択" ),
cb = チェックボックス( short_str ),
vlb1 = V リスト ボックス(
スペーサーボックス()、
H リスト ボックス(
rb2 = ラジオボックス(
「番組名」、
cb << 削除;
vlb1 << 先頭に追加(
cb = チェックボックス(
short_str
)
);
nw << ウィンドウ サイズを設定(ss_small[1],ss_small[2])
)、
rb1 = ラジオボックス(
"説明を表示",
cb << 削除;
vlb1 << prepend( cb = Check Box( str ) );
(NItems(ss_large)==0 の場合、
ss_large = nw << ウィンドウ サイズを取得
、
nw << ウィンドウ サイズを設定(ss_large[1],ss_large[2])
)
)
)
)
)
)
);
pb2 = Expr(Panel Box( , V List Box( Button Box( "Run" ), Button Box( "Cancel", <<ウィンドウを閉じる ), Spacer Box() ) ) );
nw = New Window( "例", hlb = H List Box( pb1, pb2 ) );
rb2 << グループ( rb1 );
ss_small = nw <<ウィンドウ サイズを取得;
デイブ