Estoy escribiendo un script que generará una interfaz gráfica de usuario para mostrar imágenes, utilizando un controlador de estado de fila para pasar las imágenes a la ventana.
¿Existe alguna forma de configurar un objeto Picture Box para que:
- Ajustar el tamaño de la ventana (con un tamaño mínimo y máximo definidos)
- Mantén su relación de aspecto original (por ejemplo, cuadrado) (ver guion 2)
- Prohibir el redimensionamiento directo por parte del usuario.
Aquí hay un código JSL que utiliza la tabla de imágenes de ejemplo.
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;
Aquí hay un ejemplo de índice de script de un gráfico con su relación de aspecto fija, el comportamiento que me gustaría en la imagen.
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" );
¿Qué tamaño mínimo/máximo se ha determinado (ventana o imagen)? ¿Debería permitirse al usuario cambiar el tamaño de la ventana, pero no el de la imagen? Y si se permite cambiar el tamaño de la ventana, ¿debería la imagen poder redimensionarse al nuevo tamaño de la ventana?
Usemos tamaños mínimos y máximos de 100x100 a 800x800 para la imagen, y de 200x300 a 1000x900 para la ventana.
El usuario puede cambiar el tamaño de la ventana, no de la imagen (directamente).
La imagen se agranda y se encoge según el tamaño de la ventana, manteniendo su proporción cuadrada. Esto significa que quedará algo de espacio vacío si la ventana es corta y ancha, o alta y estrecha.
No creo que se pueda establecer un tamaño mínimo/máximo para la ventana; solo se puede configurar el tamaño inicial.
Creo que lo más sencillo sería usar Graph Builder y rellenarlo con la imagen, ya que mantiene la relación de aspecto, pero no sé cómo configurar el tamaño mínimo y máximo sin probarlo. Otra opción sería usar un script gráfico para redimensionar los elementos de visualización, ya que este se activará cuando cambie el tamaño de la ventana.