我正在編寫一個腳本,該腳本將產生一個用於顯示圖像的 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。
使用者可以調整視窗大小,但不能(直接)調整圖片大小。
畫面會隨著視窗大小而放大縮小,並保持正方形的寬高比。這意味著如果視窗又短又寬或又高又窄,畫面中就會出現一些空白區域。
我認為視窗不能設定最小/最大尺寸;只能設定初始尺寸。
我認為最簡單的方法可能是使用圖形產生器並填充圖片,因為它能保持寬高比,但我不太確定如何在不測試的情況下設定最小/最大尺寸。另一種方法是使用圖形腳本來調整顯示元素的大小,因為圖形腳本會在視窗大小改變時重新觸發。