我正在编写一个脚本,该脚本将生成一个用于显示图像的 GUI,并使用 rowstate 处理程序将图像传递到窗口。
是否有办法将图片框对象设置为:
- 按窗口大小拉伸(已定义最小和最大尺寸)
- 保持其原始宽高比(例如正方形)(参见脚本 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。
用户可以调整窗口大小,但不能(直接)调整图片大小。
画面会随着窗口大小而放大缩小,并保持正方形的宽高比。这意味着如果窗口又短又宽或又高又窄,画面中就会出现一些空白区域。
我认为窗口不能设置最小/最大尺寸;只能设置初始尺寸。
我认为最简单的办法可能是使用图形生成器并填充图片,因为它能保持宽高比,但我不太确定如何在不测试的情况下设置最小/最大尺寸。另一种方法是使用图形脚本来调整显示元素的大小,因为图形脚本会在窗口大小改变时重新触发。