Problema
In molte situazioni, quando si utilizza una casella di scorrimento per controllare una variabile numerica, si desidera anche un display numerico modificabile per visualizzare il valore della variabile e che consente di impostare manualmente il valore della variabile.
Il modo corrente per farlo consiste nel creare due oggetti di visualizzazione: una Casella di modifica numero() e una Casella di scorrimento().Devi codificarlo in modo tale che siano collegati.Inoltre, il modo in cui la casella di modifica del numero interagisce con le modifiche ai valori immessi manualmente (usando <
Spesso mi ritrovo a dover dedicare molto tempo alla lettura della guida allo scripting su come creare questi oggetti e come collegarli. (Vorrei che ci fosse un oggetto di visualizzazione JMP integrato come questo)
Soluzione
Ho creato una funzione SliderNumberEditBox() che crea un'espressione valutata che crea insieme entrambe le caselle di visualizzazione. Queste finestre di visualizzazione saranno collegate come descritto sopra.Prende come argomenti stringhe di caratteri che definiscono i riferimenti alla casella di modifica del numero, il valore iniziale per la casella di modifica del numero, il riferimento alla casella di scorrimento, l'intervallo superiore e inferiore per la casella di scorrimento, la variabile controllata dallo slider casella e, facoltativamente, l'espressione che si desidera eseguire quando la casella di modifica del numero viene aggiornata manualmente e l'espressione che si desidera eseguire quando viene modificata la casella di scorrimento.(si noti che le espressioni devono essere definite come stringhe di caratteri e le sequenze di escape appropriate devono essere utilizzate per i caratteri riservati che si desidera citare all'interno della stringa).
SliderNumberEditBox = Function( {nebref, nebinitval, sbref, sblower, sbupper, sbvar, nebFunction = "", sbFunction = ""},
Eval(
Parse(
"H List Box(" || nebref || " = Number Edit Box(" || nebinitval || ",
<<SET function=""></SET>La funzione utilizza la concatenazione di stringhe per creare l'intera versione stringa dell'espressione per le caselle di visualizzazione, quindi analizza la stringa in un'espressione e restituisce l'espressione valutata.
Sintassi
SliderNumeroEditBox( stringa per il riferimento alla casella di modifica del numero , stringa per il valore iniziale della casella di modifica del numero , stringa per il riferimento alla casella di scorrimento , stringa per l'intervallo inferiore del dispositivo di scorrimento , stringa per l'intervallo superiore del dispositivo di scorrimento , stringa per la variabile controllata dallo slider , , )
k = 1;
SliderNumberEditBox(
"_neb1",
Char( k ),
"_sb1",
"0",
"2",
"k")
restituisce l'espressione valutata di seguito
H List Box(
_neb1 = Number Edit Box(
0.5,
<<SET function=""></SET>
Esempio
SliderNumberEditBox = Function( {nebref, nebinitval, sbref, sblower, sbupper, sbvar, nebFunction = "", sbFunction = ""},
Eval(
Parse(
"H List Box(" || nebref || " = Number Edit Box(" || nebinitval || ",
<<SET function=""></SET>crea una finestra simile a questa (ho cambiato la casella di scorrimento con un valore diverso)

Stavo cercando nella community alcuni buoni esempi di utilizzo di Eval/Eval Expr quando mi sono imbattuto in questo e ho pensato di condividere la mia implementazione della funzione SliderNumberEditBox che utilizza la creazione di espressioni piuttosto che la concatenazione di stringhe.
Molti degli argomenti passati nella funzione non sono più stringhe e ora c'è un argomento di opzione nsName per fornire il nome dello spazio dei nomi in cui dovrebbero esistere le variabili (il valore predefinito è global).
SliderNumberEditBox = Function( {nebref, nebinitval, sbref, sblower, sbupper, sbvar,
nsName = "global", nebFunction = Expr(), sbFunction = Expr()},
Eval( // evaluate to create the diplay boxes
Eval Expr( // evaluate everything wrapped with Expr()
H List Box(
// Create the Number Edit Box
// As Scoped() is used when the variable names are to be dynamic
As Scoped( Expr( nsName ), Expr( nebref ) ) = Number Edit Box(
Expr( nebinitval ),
<<SET function=""></SET>
Chiunque sia interessato a saperne di più sulla creazione di espressioni potrebbe dare un'occhiata @ih post di JSL nel Cookbook: Inserisci un'espressione in un'altra usando Eval Insert, Eval Expr, Parse e Substitute
Mi chiedevo se dovessi aggiungere alla "lista dei desideri di JMP" che Slider Box () ha un'opzione per avere una casella di modifica del numero collegata () o che viene creato un nuovo oggetto di visualizzazione che esegue questa funzione.
Freddo! Puoi impostare il contenuto di una casella di testo senza ricrearla, il che rende l'esempio più facile da leggere:
k = 1;
_nw = New Window( "Slider Number Edit Box",
_vlb = V List Box(
SliderNumberEditBox(
"_neb1",
Char( k ),
"_sb1",
"0",
"2",
"k",
"_tb << settext(\!"The number is \!" || char(k))",
"_tb << settext(\!"The number is \!" || char(k))"
),
_tb = Text Box( "The number is " || Char( k ) )
)
);