JSL: ripristina le dimensioni del PanelBox nella casella di visualizzazione dinamica<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Gli oggetti Panel Box() adattano automaticamente le loro dimensioni man mano che il contenuto si espande. Tuttavia non sembra essere vero il contrario. Premendo il pulsante di opzione destro Nello script di esempio seguente si allunga la finestra man mano che i descrittori della casella di controllo si espandono. Riselezionando il pulsante di opzione sinistro si ottengono descrittori più brevi ma la casella del pannello (e la finestra) mantengono il suo stato espanso.
Come posso forzare il riquadro del pannello a ripristinare le sue dimensioni originali? Oppure esiste un altro tipo di display box che sia "più intelligente" in questo senso?
Ho provato a salvare la dimensione originale in una variabile (usando pb1 << Ottieni dimensione) e ad applicarla quando il pulsante di opzione 1 viene riselezionato, ma Panel Box() sembra non riconoscere un messaggio Set Size().
stra =
{ "caso 1: dosaggio basso, descrizione molto lunga, descrizione molto lunga, descrizione molto lunga" ,
"caso 2: dosaggio elevato, descrizione molto lunga, descrizione molto lunga, descrizione molto lunga"
} ;
breve_str = Elenco di valutazione ( { Sinistra ( stra [ 1 ] , 6 ) , Sinistra ( stra [ 2 ] , 6 )} ) ;
pb1 = espressione ( Scatola del pannello ( ,
hlb1 = Casella di riepilogo V ( tb = Casella di testo ( "Seleziona caso" ) ,
cb = Casella di controllo ( breve_str ) ,
vlb1 = Casella di riepilogo V (
Scatola distanziatrice () ,
Casella di riepilogo H (
RB2 = Scatola radiofonica (
"Mostra nome" ,
cb << eliminare ;
vlb1 << anteporre ( cb = Casella di controllo ( breve_str ))) ,
RB1 = Scatola radiofonica (
"Mostra descrizione" ,
cb << eliminare ;
vlb1 << anteporre ( cb = Casella di controllo ( stra )))))))
) ;
pb2 = Espr (
Scatola del pannello ( ,
Casella di riepilogo V (
Casella dei pulsanti ( "Correre" ) ,
Casella dei pulsanti ( "Annulla" , << chiudi la finestra ) ,
Scatola distanziatrice ()
))) ;
Nuova finestra ( "Esempio" ,
hlb = Casella di riepilogo H ( pb1 , pb2 )
) ;
RB2 << gruppo ( RB1 ) ;
JSL: ripristina le dimensioni del PanelBox nella casella di visualizzazione dinamicaGrazie Dave! Funziona. Ho esplorato una soluzione simile utilizzando set content size() invece di set window size(). I comandi sembrano essere intercambiabili, almeno in questo esempio.
C'è ancora una piccola stranezza. Quando si alterna tra i due pulsanti di opzione, l'impostazione della finestra fallisce ogni seconda o terza volta. La finestra quindi diventa più piccola del suo contenuto. Questo problema si presenta sia nella tua che nella mia soluzione. Penso che derivi da una certa asincronia nell'esecuzione del codice, ad esempio che la dimensione della finestra viene recuperata prima del completamento di prepend(). Tuttavia l'inserimento di Wait(0.01) nello script del pulsante rb1 sembra eliminare il comportamento peculiare. Vedi l'estratto qui sotto.
Forse questo è specifico della macchina, quindi la stranezza potrebbe non verificarsi per tutti. Utilizzo JMP 9.02 su un Mac Pro piuttosto veloce.
...If (NItems(ss_large)==0, Wait(0.01);
ss_large = nw << ottieni la dimensione della finestra
,
nw <
)...
Grazie ancora!
Oggetto: JSL: ripristinare le dimensioni del PanelBox nella casella di visualizzazione dinamicaNon penso che il problema riguardi specificamente la scatola del pannello: si ottiene lo stesso problema se si rimuove la scatola del pannello.
È la finestra stessa che aumenta le sue dimensioni per accogliere il contenuto.
La soluzione che proponi funziona quindi se applichi il ridimensionamento alla finestra.Tuttavia, una volta ridimensionata, una finestra non si ridimensionerà da sola, quindi è necessario controllare il ridimensionamento per ingrandirla e ridurla.
Questo codice sembra funzionare...
str = {"caso 1: dose bassa descrizione davvero lunga descrizione davvero lunga descrizione davvero lunga",
"caso 2: dosaggio elevato descrizione molto lunga descrizione molto lunga descrizione molto lunga"};
short_str = Lista valutazioni( {Sinistra( str[1], 6 ), Sinistra( str[2], 6 )} );
ss_piccolo = {};
ss_grande = {};
pb1 = Espr(
Riquadro bordo( ,
hlb1 = Casella di riepilogo V(
tb = casella di testo ("Seleziona caso"),
cb = Casella di controllo (short_str),
vlb1 = Casella di riepilogo V(
Scatola del distanziatore(),
Casella di riepilogo H(
rb2 = Scatola radio(
"Mostra nome",
cb<
vlb1 << anteporre(
cb = Casella di controllo(
breve_str
)
);
nw <
),
rb1 = Scatola radio(
"Mostra descrizione",
cb<
vlb1 << anteponi( cb = Casella di controllo( str ) );
Se (NItems(ss_large)==0,
ss_large = nw << ottieni la dimensione della finestra
,
nw <
)
)
)
)
)
)
);
pb2 = Espr( Casella del pannello( , Casella di riepilogo V( Casella dei pulsanti( "Esegui" ), Casella dei pulsanti( "Annulla", <
nw = Nuova finestra( "Esempio", hlb = Casella di riepilogo H( pb1, pb2 ) );
rb2 << gruppo( rb1 );
ss_small = nw <
Dave