ProblèmeVous devez créer une calculatrice personnalisée qui affiche un tableau de nombres basé sur plusieurs valeurs d'entrée.
SolutionUtilisez les zones d'édition de nombres pour obtenir les valeurs et utilisez la méthode Set Function pour attacher JSL aux zones d'édition de nombres afin de recalculer le tableau lorsque les valeurs sont modifiées. Utilisez une zone de table pour contenir des colonnes de nombres. Reconstruisez les colonnes de nombres lorsque les valeurs changent.
if( jmpversion()<"13", Open Log(1); throw("nécessite JMP 13 ou supérieur")); // besoin de valeurs par défaut pour configurer les zones d'édition emprunter = 1e5 ; ans = 2 ; avril = 15 ; cur = "USD" ; // "EUR" New Window( "table demo", Border Box( Left( 5 ), Right( 5 ), bottom( 5 ), // cette case prolonge le vert pâle de quelques pixels V List Box( // border boxes besoin d'un seul enfant, comme une vlist, pour tout contenir Border Box( Left( 20 ), Right( 20 ), top( 10 ), bottom( 10 ), // la bordure de saisie des données H List Box( // séparer les données champs de saisie du titre "Intéressant" V List Box( // les trois champs de saisie verticaux et leurs libellés H List Box( // un champ et son libellé Number Edit Box( // un champ emprunter, < 12, month -= 12; year += 1; ); dates[i ] = Date DMY( jour, mois, année ); mois += 1; ); While( !Is Empty( tb << child ), (tb << child) << delete ); // supprimer les données précédentes, le cas échéant // ajoute les nouvelles colonnes au tableau tb << append( Number Col Box( "Due Date", dates, <Je ne suis pas un gars des finances. Ne présumez pas que j'utilise les formules correctement. J'ai choisi des nuances de vert et spécifié certains paramètres de boîte de table pour rendre la table attrayante. Je ne suis pas un artiste, vous pouvez faire mieux. La zone d'espacement verte crée une belle barre de couleur et remplit la page sans l'élargir en utilisant les options AutoStretching et MaxSize. La fonction freshen() est appelée à partir des trois champs de saisie de données et ne se soucie pas du champ modifié. Vous pourriez faire quelque chose de plus compliqué, mais à moins que vous n'ayez des calculs vraiment lents, restez simple. Vous pouvez cliquer avec le bouton droit sur la table et la transformer en table de données pour traiter davantage les données ; vous voudrez peut-être un moyen d'enregistrer les paramètres avec la table de données (un autre bouton, peut-être, pour créer la table de données). Vous pouvez également journaliser le rapport qui inclura les paramètres.
Voir égalementAide->Livres->Guide de script contient plus d'informations sur les boîtes de table
J'ai commencé à écrire des scripts au début de 2021 et ce message a été vraiment utile. J'ai copié la majeure partie du script ci-dessus et l'ai modifié pour ma propre calculatrice, dont je prévois d'utiliser la sortie sur une autre plate-forme.
Cependant, je ne suis pas entièrement satisfait de ce que j'ai réalisé. Lorsque j'ouvre et exécute mon script pour la première fois, j'obtiens deux cases numériques préremplies dans lesquelles je peux saisir des valeurs.

Ce n'est que lorsque je modifie l'une des valeurs dans les cases numériques pré-remplies que la troisième case avec le résultat qui m'intéresse réellement apparaît.

Je pense que j'ai rencontré cela, car ce que j'ai créé est basé sur le code fourni par @Craige_Hales au-dessus de.
- Comment puis-je faire en sorte que la troisième case (entourée en rouge ci-dessus) apparaisse dès le début, mais soit également mise à jour en fonction des valeurs d'entrée dans les deux autres cases ?
- Existe-t-il une solution plus efficace pour construire une petite calculatrice ou utilise-t-on une approche inutilement compliquée ?
À ce stade, je voulais également mentionner que, oui, j'ai étudié le Guide de script ainsi que l'Index de script, mais je ne suis pas encore assez fort pour trouver ma propre solution. (Je n'ai cependant pas parcouru "Jump into JMP Scripting", car je n'ai actuellement pas accès à ma copie.)
Names default to here ( 1 );
// some default values for the first two number edit boxes
CurrentConc_wt% = 45.00;
LowestAcceptConc_wt% = 40.00;
New Window( "Calculating Concentration acceptance limit",
Border Box(Left( 5 ), Right( 5 ), bottom( 20 ),
V List Box(
Text Box("Some comment")
)
),
Border Box(Left( 5 ), Right( 5 ), bottom( 20 ),
V List Box(
Text Box("Instructions: [add instructions here later]")
)
),
Border Box(Left( 5 ), Right( 5 ), bottom( 5 ), // added this because I copied this code and left in there, just in case...
V List Box( // border boxes need a single child, like a vlist, to hold everything
Border Box(Left( 5 ), Right( 5 ), bottom( 5 ), // border for data entry boxes
H List Box(
V List Box(
Border Box(Left( 5 ), Right( 5 ), bottom( 5 ),
H List Box(
Number Edit Box(
CurrentConc_wt%,
<<SETFORMAT></SETFORMAT>
Il me faudra un peu de temps avant de pouvoir regarder cela plus en profondeur. Mais je pense que vous manquez peut-être l'appel à la toute fin du JSL original, freshen() , qui était là pour initialiser toutes les cases comme si quelque chose avait déjà été cliqué.
Merci, c'était une solution facile. Peut-être y a-t-il des raisons d'être satisfait après tout.