Cómo lograr que el script Button Box tenga una expresión evaluadaHola,
Estoy tratando de crear una adición automatizada de cuadros de botones que apuntarán a cuadros de esquema individuales (como un ejemplo con ventana de desplazamiento o cierre). Logro crear la expresión a través de un bucle For que inserta el nombre de los elementos del script en la lista con éxito, pero cuando voy a hacer que cada cuadro de botones tenga un script único, en su lugar contienen el nombre de la expresión 'buttonclickexpr' como el script.
¿Cómo puedo lograr que el script en la expresión se evalúe y se coloque correctamente como un comando escrito para que el cuadro del botón se ejecute al hacer clic?
//an example of how the window could appear
report_win=new window("test", content_VLB=V List Box(), Outline Box("Example: Distribution"), Outline Box("Example: Multivariate"));
//example of the variable that would store the name of scripts that created the OBs
script_new={"Distribution", "Multivariate", "Profiler"};
//the for loop to correctly setup the expression with the correct section name and add a button
For( i = 1, i <= N Items( script_new ), i++,
buttonclickexpr = Expr(
report_win << Scroll Window(
report_win[Outline Box( sectionName)]
)
);
Substitute Into( buttonclickexpr, Expr(sectionName), Char("Example: " ||script_new[i]) );
write(buttonclickexpr);
// Add a button to the list
content_VLB<
<APPEND></APPEND>
<BR />
<LINGO-LABS id="lingo-labs-914974" slang="en-US" mode="CREATE">
<LINGO-LABEL>Automatización y scripting</LINGO-LABEL>
</LINGO-LABS>
Re: Cómo lograr que el script Button Box tenga una expresión evaluadapuedes usar Eval(Eval Expr()).
//an example of how the window could appear
report_win = New Window( "test",
content_VLB = V List Box(),
Scroll box (Size(20,1500)),
Outline Box( "Example: Distribution" ),
Scroll box (Size(20,1500)),
Outline Box( "Example: Multivariate" )
);
//example of the variable that would store the name of scripts that created the OBs
script_new = {"Distribution", "Multivariate", "Profiler"};
//the for loop to correctly setup the expression with the correct section name and add a button
For( i = 1, i <= N Items( script_new ), i++,
buttonclickexpr = Expr(
report_win << Scroll Window( report_win[sectionName ] );
Caption(sectionName)
);
Substitute Into( buttonclickexpr, Expr( sectionName ), Char( "Example: " || script_new[i] ) );
Write( buttonclickexpr );
// Add a button to the list
Eval (Eval Expr(content_VLB << append( Button Box( "Go to " || script_new[i], Expr(Name Expr(buttonclickexpr)))) ));
);
En OutlineBox("etiqueta") , la etiqueta es la HelperKey del OutlineBox. Para acceder al cuadro de esquema mediante el título, puede usarlo directamente [sin Cuadro de esquema() ].
Los detalles se pueden encontrar en Re: Manejo de expresiones en JMP: Consejos y trampas
| usar |
|
| Nombre Expr() |
... to retrieve the expression that is stored in the name buttonclickexpr |
| Expr() |
... para marcar el código, de modo que Eval Expr() pueda encontrarlo |
| Eval Expr() |
...para encontrar Expr() y evaluarlo |
| Evaluar() |
...para evaluar toda la expresión después de los pasos anteriores. |
Re: Cómo lograr que el script Button Box tenga una expresión evaluadaUn enfoque alternativo: Sustituir()
[ya se utiliza para ajustar la expresión del clic del botón *)]
Ambos pasos en uno:
For each ({title}, script_new ,
myExpr = Expr(
content_VLB << append( Button Box( "Go to " || title,current report() << Scroll Window( current report()[_sectionName_ ] )));
);
Eval(Substitute (Name Expr(myExpr), Expr( _sectionName_ ), "Example: " || title ));
);
| usar |
|
| Sustituto() |
... como Sustituir una cadena, pero recuerda que los argumentos se evalúan. Por eso debes usar... |
| Nombre Expr() |
... para recuperar la expresión que está almacenada en el nombre miExpr - ¡¡¡sin evaluarlo!!! |
| Expr() |
... to protect _sectionName_ from getting evaluated |
| Evaluar() |
...para evaluar toda la expresión después de los pasos anteriores. |
*) Excepto Substitute. Sustituir en() no evalúa su primer argumento.