저는 rowstate 핸들러를 사용하여 이미지를 창으로 전달하는 이미지 표시용 GUI를 생성하는 스크립트를 작성하고 있습니다.
PictureBox 객체를 다음과 같이 설정하는 방법이 있습니까?
- 창 크기에 따라 늘립니다(최소 및 최대 크기 정의).
- 원래의 가로세로 비율(예: 정사각형)을 유지합니다(스크립트 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까지로 설정해 보겠습니다.
사용자는 창의 크기를 조절할 수 있지만, 그림 자체의 크기는 (직접) 조절할 수 없습니다.
이미지는 창 크기에 따라 확대 및 축소되지만 정사각형의 가로세로 비율은 유지됩니다. 즉, 창이 짧고 넓거나 길고 좁은 경우 빈 공간이 생길 수 있습니다.
창의 최소/최대 크기를 설정할 수는 없고, 초기 크기만 설정할 수 있는 것 같습니다.
그래프 빌더를 사용해서 그림을 채우는 게 가장 쉬울 것 같습니다. 가로세로 비율을 유지할 수 있으니까요. 하지만 최소/최대 크기를 설정하는 방법은 직접 테스트해보지 않고는 확실히 모르겠습니다. 다른 방법으로는 그래픽 스크립트를 이용해서 디스플레이 요소의 크기를 조절하는 것도 있습니다. 그래픽 스크립트는 창 크기가 변경될 때 다시 실행되니까요.