私はここで「Supercharge Your User Interfaces in JSL ( US 2018 113 )」という興味深いコードを見つけたので、これを少し変更してテーブル スクリプトとして実装しようとしています (デモ テーブルを添付)。
最後に適用したい仕上げは次のとおりです。
- スクリプトで画像のサイズを設定します (理想的には、元のアスペクト比を維持します)。
たとえば、43 行目から始まる if() 関数内のさまざまな位置で 'one_pic << Set Size({200,200})' と 'one_pic << scale (.2)' を試しました。また、これらのメッセージを他の場所でも試しました。成功しませんでした。 - 名前空間の使用に関しては自信がなく、変数や参照に関してもあまり経験がないため、スクリプトは 'dt = current data table()' を使用して、スクリプトが格納されているテーブルを参照します。
これは正しい計算アプローチでしょうか、それとも経験の浅いスクリプト作成者が行うことでしょうか?
助けてくれてありがとう。
ここでなぜ 1 つの追加変数を使用する必要があるのかは正確にはわかりません (そうしないと、テーブル内の画像のサイズを変更しようとして、それができない可能性があります)
Names Default To Here(1);
dt = Current Data Table();
name_list = dt:name << get values;
num_list = dt:number << get values;
pic_list = dt:picture << get values;
nw = New Window("row",
V List Box(
tb = Text Box("some row"),
H List Box(
Panel Box("names & numbers",
V Scroll Box(
tbox = Table Box(String Col Box("Name", name_list), String Col Box("Number", num_list), )
)
),
Panel Box("pics",
pb = picture box()
)
)
)
);
tb << set font style("Italic") << font color("Dark Blue") << set font("Stencil", 16) << set width(450);
tbox << set underline headings(1) << set heading column borders(1) << set column borders(1) <<
set row borders(1) << set shade alternate rows(1) << set selectable rows(1);
tbox << set row change function(Function({this},
row_list = this << get selected rows;
If(N Rows(row_list) > 0,
k = row_list[1];
one_pic = pic_list[k];
pic = one_pic;
pic << Scale(0.2);
pb << set image(pic);
);
)
);
通常、テーブル スクリプトは使用しませんが、このような場合には Current Data Table() を使用すれば問題ないと思います。場合によっては、間違ったテーブルを参照する可能性があります (テーブル スクリプトを実行した直後にテーブルを変更した場合など) が、ほとんどの場合、ここでは問題にはなりません。他のオプションとしては、dt と current datatable() を削除し、:name、:number、:picture のみを使用して、テーブル スクリプトが常に正しいテーブルを参照するようにする (このような単純なテーブル スクリプトの場合は、current data table() を使用するよりもこの方法の方が適している可能性があります)。