Sto scrivendo uno script che genererà un'interfaccia grafica per la visualizzazione di immagini, utilizzando un gestore di stato di riga per passare le immagini alla finestra.
Esiste un modo per impostare un oggetto picture box in modo che:
- Adatta la dimensione della finestra (con una dimensione minima e massima definita)
- Mantieni le proporzioni originali (ad esempio quadrato) (vedi script 2)
- Vietare il ridimensionamento diretto da parte dell'utente.
Ecco del codice JSL che utilizza la tabella di immagini di esempio.
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;
Ecco un esempio di indice di script di un grafico con il suo rapporto di aspetto fisso, il comportamento che vorrei sull'immagine
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" );
Quale dimensione minima/massima è stata determinata (finestra o immagine)? L'utente dovrebbe essere autorizzato a ridimensionare la finestra ma non l'immagine? E se è autorizzato a ridimensionare la finestra, l'immagine dovrebbe potersi adattare alle nuove dimensioni della finestra?
Utilizziamo dimensioni minime e massime comprese tra 100x100 e 800x800 per l'immagine e tra 200x300 e 1000x900 per la finestra.
L'utente può ridimensionare la finestra, non l'immagine (direttamente).
L'immagine si ingrandisce e si rimpicciolisce in base alle dimensioni della finestra, mantenendo le proporzioni quadrate. Ciò significa che ci sarà dello spazio vuoto se la finestra è bassa e larga oppure alta e stretta.
Non credo sia possibile impostare una dimensione minima o massima per la finestra; si può solo impostare la dimensione iniziale.
Penso che la soluzione più semplice potrebbe essere usare Graph Builder e riempirlo con l'immagine, dato che mantiene le proporzioni, ma non sono sicuro di come impostare le dimensioni minime e massime senza fare delle prove. Un'altra opzione potrebbe essere quella di utilizzare uno script grafico per ridimensionare gli elementi visualizzati, poiché lo script si riattiverà quando cambiano le dimensioni della finestra.