J'écris un script qui générera une interface graphique pour afficher des images, en utilisant un gestionnaire rowstate pour transmettre les images à la fenêtre.
Existe-t-il un moyen de définir un objet PictureBox sur :
- Étirer en fonction de la taille de la fenêtre (avec une taille minimale et maximale définie)
- Conserver son format d'image d'origine (par exemple carré) (voir script 2)
- Interdire le redimensionnement direct par l'utilisateur.
Voici du code JSL qui utilise le tableau d'images d'exemple.
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;
Voici un exemple d'index de script d'un graphique dont le rapport hauteur/largeur est fixe ; c'est le comportement que je souhaite obtenir sur l'image.
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" );
Quelle taille minimale/maximale a été définie (fenêtre ou image) ? L’utilisateur doit-il pouvoir redimensionner la fenêtre mais pas l’image ? Et s’il peut redimensionner la fenêtre, l’image doit-elle pouvoir s’adapter à la nouvelle taille de la fenêtre ?
Utilisons des tailles minimales/maximales de 100x100 à 800x800 pour l'image et de 200x300 à 1000x900 pour la fenêtre.
L'utilisateur peut redimensionner la fenêtre, mais pas l'image (directement).
L'image s'adapte à la taille de la fenêtre tout en conservant son format carré. Par conséquent, il y aura des espaces vides si la fenêtre est basse et large ou haute et étroite.
Je ne pense pas qu'il soit possible de définir une taille minimale/maximale pour la fenêtre ; on peut seulement définir sa taille initiale.
Je pense qu'il serait plus simple d'utiliser Graph Builder et d'y insérer l'image, car cela permet de conserver les proportions. Cependant, je ne sais pas comment définir les dimensions minimales et maximales sans faire de tests. Une autre solution serait d'utiliser un script graphique pour redimensionner les éléments d'affichage, car ce script se réactive lorsque la taille de la fenêtre change.