画像を表示するためのGUIを生成するスクリプトを作成しています。このスクリプトでは、行状態ハンドラを使用して画像をウィンドウに渡します。
画像ボックスオブジェクトを以下のように設定する方法はありますか?
- ウィンドウサイズに合わせて伸縮(最小サイズと最大サイズを指定可能)
- 元の縦横比(例:正方形)を維持する(スクリプト2を参照)。
- ユーザーによる直接的なサイズ変更を禁止する。
以下は、サンプル画像テーブルを使用したJSLの例です。
Clear Globals();
Names Default To Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
//Set the picture equal to selected row
rs_updateviewer = Expr(
SelectedRows = (dt << Get Selected Rows());
i = If(N Items(SelectedRows) == 0, 1, SelectedRows[1]);
img = column(dt, "pet")[i];
pb << Set Image(img);
);
//Viewer Window
Viewer = New Window(
"Viewer",
Show Menu( 0 ),
<< On Close(Clear Globals(rs);
),
<< Size Window( 1000, 700),
vb = V List Box("Center",
H Center Box( Text Box( "Viewer" ) ),
H List Box(
// tb = dt << New Data Box(),
tb = Data Grid Box(),
pb = Picture Box()
)
)
,
pb << Set Stretch( "Fill", "Fill" );
pb << Border( 1 );
tb << Set Stretch( "Off", "Off" );
tb << Set Data Table( dt );
tb << Close Side Panels( 1 );
);
//Initiate image
rs_updateviewer;
// Define the handler function
f = Function( {a},
rs_updateviewer
);
// Register the row state handler to the table
set_rowstate = Expr(
rs = dt << Make Row State Handler( f );
);
set_rowstate;
アスペクト比が固定されたグラフのスクリプトインデックスの例を以下に示します。これは、画像で実現したい動作です。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = Graph Builder( Show Control Panel( 0 ), Variables( X( :height ), Y( :weight ) ), Elements( Points( X, Y ), Smoother( X, Y ) ) );
gb << Fit to Window( "Maintain Aspect Ratio" );
最小/最大サイズはウィンドウと画像のどちらが設定されているのでしょうか?ユーザーはウィンドウのサイズを変更できるが、画像のサイズ変更はできないようにすべきでしょうか?また、ウィンドウのサイズ変更が許可されている場合、画像も新しいウィンドウサイズに合わせてサイズ変更できるべきでしょうか?
画像のサイズは最小値100x100から最大値800x800、ウィンドウのサイズは最小値200x300から最大値1000x900としましょう。
ユーザーはウィンドウのサイズを変更できますが、画像自体のサイズは変更できません(直接変更することはできません)。
画像はウィンドウサイズに合わせて拡大縮小しますが、正方形のアスペクト比は維持されます。つまり、ウィンドウが横長または縦長の場合は、余白が生じます。
ウィンドウの最小サイズや最大サイズを設定することはできないと思います。初期サイズしか設定できません。
グラフビルダーを使って画像を配置するのが一番簡単だと思います。グラフビルダーなら縦横比を維持できますが、最小サイズと最大サイズの設定方法が試してみないと分かりません。別の方法としては、グラフィックスクリプトを使って表示要素のサイズを変更することも考えられます。グラフィックスクリプトはウィンドウサイズが変更されると自動的に再実行されるからです。