テーブルボックス内の行のブロックをシェーディングする<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />こんにちは、
テーブル ボックスには、それぞれ 3 行のブロックに自然にグループ化される多数の行が含まれています (行 1 ~ 3 は 1 つの化合物に関連し、行 4 ~ 6 は別の化合物に関連し、行 7 ~ 9 は 3 番目の化合物に関連するため) 、 等々)。化合物のブロックを視覚的に区別しやすくするために行をシェーディングしたいと考えています。そのため、行 1 ~ 3 をシェーディングし、行 4 ~ 6 を白のままにし、次に行 7 ~ 9 をシェーディングし、次に行 10 ~ 12 を残します。白など (一度に 3 行のシェーディングが必要なため、「<< 交互の行をシェーディング」プロパティを使用することはできません。)
「<< set selected rows()」プロパティを使用して、3 行のブロックをすべて交互に事前選択できますが、その後ユーザーがいずれかの行をクリックしたり、選択/選択解除したりすると、その色付けパターンが失われます。 。したがって、「<< set row change function」プロパティ内に同じプロパティを適用しました。そのため、ユーザーがテーブル上の任意の場所をクリックすると、シェーディングがすぐに再適用されます。最終的には次のような結果になります。
nameList = 繰り返し({"A"}, 3) ||繰り返し({"B"}, 3) ||繰り返し({"C"}, 3) ||繰り返し({"D"}, 3) ||繰り返し({"E"}, 3) ||繰り返し({"F"}, 3) ||繰り返し({"G"}, 3) ||繰り返し({"H"}, 3);
threeList = {1、2、3、7、8、9、13、14、15、19、20、21};
tb = テーブルボックス(
String Col Box("名前", nameList),
Number Col Box("最初", インデックス(1, 24)),
Number Col Box("秒", インデックス(25, 48)),
Number Col Box("3 番目", インデックス(49, 72)),
<< 選択した行の色を設定("シアン")、
<< 選択された行を設定(threeList)、
<< 行変更関数の設定(tb << 選択された行の設定(threeList))、
<< スクロール可能な設定(1)、
<< 列の境界線を設定(1)、
<< 下線の見出しを設定(1)
);
新しいウィンドウ(「私のウィンドウ」、tb);
これは機能しますが、少し複雑なようです。誰かがそれを行う簡単な方法を提案できますか?
どうもありがとう。
Re: テーブル ボックス内の行のブロックをシェーディングする新しいデータ ビューの使用に関するいくつかの懸念に対処するために、次のようにします。
ユーザーのアクションに対処するために必要なのは、Row State Handler を追加することだけです。変更を検出して関数に分岐し、プログラムで問題に対処できます。この場合のように、ビューが並べ替えられている場合、セルの色を新しい順序にリセットできます。
f =関数({ある} 、<セルの色をリセットする> ) ;
rs = dt <<行状態ハンドラーを作成する( f ) ;
Re: テーブル ボックス内の行のブロックをシェーディングする皆さん、ありがとうございます。全体的に非常に役に立ちました。元のクエリを解決するのに十分な情報が得られたので、問題が解決したものとしてチェックを入れます。
必要な選択を含むテーブルボックスを作成した後、「<< set selectable rows(0)」プロパティを設定するというVinceの提案を試しましたが、残念ながら、これを行うと実際には有効になる前に選択がクリアされてしまうようです。
私は Jim のスクリプトのコピーをとりました。私は eval()、substitute()、expr() 構造の組み合わせの構文にいつも苦労するので、応用できる実用的な例があると作業がずっと楽になります。実際、作成しているレポートの構造がその出力形式により適しているため、少なくとも当面はテーブル ボックスを使い続けるつもりですが、新しいデータ ボックスのルートはこれまで考えていなかったものです。 、将来的に役立つ可能性があります。
また、プライベートなコミュニケーションで、ユーザーがその後列の 1 つでテーブル ボックスを並べ替えようとした場合の、私自身のソリューションへの影響を考慮する必要があるかもしれないと指摘されました (これは右クリックで簡単に実行できます)。 。実際、この例ではこれは問題にはなりません。テーブル ボックスは最終レポートの一部であり、これ以上並べ替えても何の役にも立たないからですが、その点はよく理解されています。
最後に、ついでに書きましたが、「<< set row change function()」プロパティは実際には機能しません。仕事ただし、「<< set selected rows()」プロパティによって 1 つ以上の行が明示的に選択されているか、「<< set selectable rows(1)」プロパティがプロパティ設定のリストに含まれている場合は除きます。それはほんの小さなことですが、私がやろうとしていることを実行するには、これらの少なくとも 1 つが必要であることに気づくまで、私は混乱しました。
改めて、皆さんに感謝します。
Re: テーブル ボックス内の行のブロックをシェーディングするこれを処理する方法は、New Data Box() 関数を使用し、Table Box() ではなくデータ テーブルを使用することです。これにより、セルなどに色を付けて、データ テーブルのすべての編集機能を最大限に活用することができます。
ここで私が話していることを説明するスクリプトを示します。
デフォルトの名前はここにあります( 1 ) ;
dt =開ける( "$SAMPLE_DATA/Big Class.jmp" 、見えない) ;
// 3 行のグループを選択します
のために( k = 1 、 k <= 3 、 k ++、
のために(私= k 、私<= N 行( dt ) 、私=私+ 6 、
行の状態(私) =選択された状態( 1 )
)
) ;
リスト=リストとして( dt <<選択された行を取得する) ;
dt <<選択をクリア;
// すべての列をループし、セルの色を設定します
コリストする= dt <<列名を取得する( "弦" ) ;
のために(私= 1 、私<= N 個のアイテム(コリストする) 、私++、
評価(
代わりの(
エクスプレッション(
カラム( dt 、コリストする[私】 ) <<カラーセル( { "赤" 、 _リスト_ } )
) 、
エクスプレッション( _リスト_ ) 、リスト
)
)
) ;
// 表示ウィンドウを設定する
北西=新しい窓( "画面" 、
V リストボックス(
TB =テキストボックス( " 例" ) 、
vlb = V リストボックス()
)
) ;
NDB = dt <<新しいデータボックス() ;
vlb <<追加する( NDB ) ;
NDB <<サイドパネルを閉じる( 1 ) ;
TB <<フォントサイズを設定する( 20 ) ;
次の表示ウィンドウが生成されます。

Re: テーブル ボックス内の行のブロックをシェーディングするこのようなことができます。
インデックス = 1 :: 99 ;
新しい窓( "窓" 、TB =テーブルボックス(番号列ボックス( "カラム" 、 索引)));
n= 3 ; //これをグループの番号に変更できます
行 =ロック(モッド(床((索引- 1 )/n)、 2 ) ); //n 個のバーストを交互にグループ化するだけです
TB <<選択した行を設定する(行);
お役に立てれば。乾杯。
*編集* これはおそらくあなたが尋ねていた部分ではないことに今気づきました。ごめん。
行を選択してから選択不可にできますか?
tb << 選択可能な行を設定(0);