Salut tout le monde,
Je travaillais sur le codage d'un sujet différent lorsque j'avais besoin de rechercher de l'aide dans la communauté, mais je suis tombé sur ça Publier d'il y a de nombreuses années et je me suis demandé si cela pouvait être fait (il n'y avait pas de solution au message d'origine) ? Les boîtes de contour peuvent-elles être affectées à une fonction de sorte qu'en fonction de leur état d'ouverture/fermeture, elles ferment/ouvrent d'autres boîtes de contour ? Si une autre zone de contour est ouverte, la fenêtre peut-elle se mettre à jour automatiquement pour fermer toutes les autres zones de contour, à l'exception de celle qui vient d'être ouverte ?
J'ai essayé plusieurs approches différentes, et bien que vous puissiez définir une fonction dans une zone de contour, voir l'exemple ci-dessous. Vous ne pouvez apparemment pas faire référence à une autre zone de contour dans l'appel de fonction (JMP se plaint d'une référence supprimée aux autres zones de contour), et Outline Box() n'accepte pas la commande d'envoi <
Names Default To Here( 1 );
w = New Window( "My Window",
A = Outline Box( "Panel Box A",
H List Box( Button Box( "A1" ), Button Box( "A2" ), Button Box( "A3" ) ),
AFunc = Function( {this},
x = this + 2;
Show( x );
);
AFunc( 7 );
),
B = Outline Box( "Panel Box B", H List Box( Button Box( "B1" ), Button Box( "B2" ), Button Box( "B3" ) ), <<CLOSE></CLOSE>
Le script ci-dessus donne la sortie suivante :

Il génère clairement la fenêtre souhaitée et affiche la sortie de la fonction, qui est x=9. Mais, je n'ai pas réussi à essayer de créer une fonction dans la boîte de contour qui a accédé à l'état d'une autre boîte de contour et dynamiquement fermée/ouverte en conséquence.
En bref, la réponse à ma question ci-dessus (et au message d'origine) est Non (ou du moins pas encore, ou du moins que j'ai trouvé un moyen de le faire). La réponse longue est plus amusante et est Oui ( principalement , avec une solution de contournement).
Quelque chose qui est très proche de ce que demandait le message d'origine se trouve dans le code ci-dessous où j'ajoute des boutons "précédent" et "suivant" qui fermeront la zone de contour actuelle, puis ouvriront la zone de contour précédente (cyclique) ou suivante. Donc, ce n'est pas techniquement la solution souhaitée, mais elle accomplit (plus ou moins) ce qui est nécessaire.
Le seul inconvénient est que vous ne pouvez pas passer, disons, de l'ouverture de la zone de contour A à l'ouverture de la zone de contour C et qu'elle met à jour dynamiquement la fenêtre en fermant toutes les autres zones de contour, à l'exception de C. Je peux imaginer certaines situations où avoir cette fonctionnalité dans une Outline Box serait très utile. Peut-être que cela pourrait être une future fonctionnalité dans les nouvelles versions de JMP ?
Quoi qu'il en soit, je pensais que le post original était intéressant et je voulais étudier ce chemin un peu avant de revenir à mon autre travail.
Merci!,
DS
Code pour la "solution de contournement":
Names Default To Here( 1 );
w = New Window( "My Window",
A = Outline Box( "Outline Box A",
V List Box(
H List Box( Button Box( "A1" ), Button Box( "A2" ), Button Box( "A3" ) ),
H List Box(
Button Box( "prev",
<<STYLE>&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/PRE&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/lingo-body&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;lingo-labs id="lingo-labs-438433" slang="en-US"&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;lingo-label&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Script&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/lingo-label&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/lingo-labs&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/lingo-labs&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;</STYLE>Vous pourrez peut-être le faire avec XPath ou une combinaison de <
Quelques exemples pour vous aider à démarrer :
Names Default To Here(1);
func_prev = Function({this},
((this << Parent) << parent) << Close(1);
(((btn_prev << parent) << parent) /*current*/ << prev sib) << Close(0);
);
func_next = Function({this},
((this << Parent) << parent) << Close(1);
(((this << Parent) << parent) << sib) << Close(0);
);
nw = New Window("My Window",
Outline Box("Panel Box A",
H List Box(Button Box("A1"), Button Box("A2"), Button Box("A3")),
H List Box(
Button Box("prev", <<STYLE>stop();
nw &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; XPath("//OutlineBox"); //get all outline boxes
nw &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; XPath("//OutlineBox[@isOpen='true']"); //get all open
nw &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; XPath("//OutlineBox[@isOpen='false']"); //get all closed
(nw &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; XPath("//OutlineBox[@isOpen='true']")) &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Close(1); //close all open
(nw &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; XPath("//OutlineBox[@isOpen='false']")) &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Close(0); //open all closed
</STYLE>Vous pouvez spécifier une fonction On Close() pour les zones de contour.
salut @jthi ,
Merci pour vos commentaires et réflexions. La dernière section de mon code qui a été publiée fait fondamentalement la même chose que vos suggestions, permet à l'utilisateur de se déplacer cycliquement dans les différentes zones de contour. Malheureusement, il n'existe pas encore de solution qui évalue dynamiquement l'état d'une boîte de contour et modifie ensuite les autres boîtes de contour en réponse.
Merci!,
DS