Dynamische Liste von Schaltflächen, die mit Skripten in einem Ordner verknüpft sindHallo JMP-Crew!
Ich hoffte, eine Anleitung zu bekommen, wie ich ein dynamisches Fenster mit Schaltflächen erstellen könnte, die mit den Skripten in einem referenzierten Ordner verknüpft wären. Wenn ich also zwei Skripte im Ordner hätte, hätte ich ein Fenster mit zwei Schaltflächenfeldern. Wenn ich 50 hätte, hätte ich 50 Schaltflächenfelder. Idealerweise könnte es eine Möglichkeit geben, dem Fenster dynamisch mitzuteilen, in wie vielen „Spalten“ die Schaltflächenfelder angeordnet werden sollen.
Jede Hilfe wäre willkommen!
Steve
Automatisierung und SkriptingBetreff: Dynamische Liste von Schaltflächen, die mit Skripten in einem Ordner verknüpft sindHier ist ein Beispiel, das die als Beispiele für JMP installierten Skripte verwendet. Der Verzeichnisverweis muss von JMPPRO in JMP geändert werden, wenn Sie JMPPRO nicht haben. Außerdem muss die Versionsnummer 18 in Ihre Versionsnummer geändert werden.
Names Default To Here( 1 );
dir = "C:\Program Files\JMP\JMPPRO\18\Samples\Scripts";
files = Files In Directory( dir );
For( i = N Items( files ), i >= 1, i--,
If( Word( -1, files[i], "." ) != "jsl",
Remove From( files, i, 1 )
)
);
theExpr = "";
For Each( {scr}, files,
theExpr = theExpr || ",ButtonBox(\!"" || Word( -2, scr, "./\" ) || "\!", include(\!""
|| dir || "\" || scr || "\!") )"
);
Eval(
Parse(
"nw = New Window( \!"Scripts\!",
Outline Box( \!"Select Script to Run\!",
Lineup Box( N Col( 4 )"
|| theExpr || " )
)
);"
)
);

Ich ziehe es vor, die Eval(Parse())-Methode nicht zu verwenden, es war jedoch zu spät, um eine besser lesbare Syntaxversion zu erarbeiten. Diese Methode funktioniert. Suchen Sie nach anderen Community-Mitgliedern, die meinen Code verbessern können.
Betreff: Dynamische Liste von Schaltflächen, die mit Skripten in einem Ordner verknüpft sind@txnelson Sie denken vielleicht nicht, dass es der sauberste Code ist, aber er funktioniert wunderbar! Danke für die Hilfe und die schnelle Antwort!!
Steve
Betreff: Dynamische Liste von Schaltflächen, die mit Skripten in einem Ordner verknüpft sind
Betreff: Dynamische Liste von Schaltflächen, die mit Skripten in einem Ordner verknüpft sindEine etwas andere Version von Jims Code (Filter Each, um eine Liste der .jsl-Dateien zu erhalten, Eval(EvalExpr()), um Schaltflächen mit den Pfaden anzuhängen)
Names Default To Here(1);
dir = "$SAMPLE_SCRIPTS/";
dir = Convert File Path(dir, windows);
files = Files In Directory(dir);
jslfiles = Filter Each({filename}, files, Word(-1, filename, ".") == "jsl");
// Not sure how you would like to determine column count, but with Lineup box it is fairly easy
lub = Lineup Box(N Col(4));
For Each({filename}, jslfiles,
Eval(EvalExpr(
lub << Append(Button Box(filename,
nw = New Window(Expr(filename),
Script Box(Load Text File(Expr(dir || filename)), "JSL", 600, 600)
);
));
));
);
nw = New Window("Scripts in " || dir,
Outline Box("Click to Open a Script",
lub
);
);
Je nachdem, was Sie tun, können Sie auch eine Funktion/einen Ausdruck in Betracht ziehen, den/die jeder der Buttons aufruft. Dies auf robuste Weise zu tun, erfordert allerdings etwas mehr Arbeit, daher ist es immer eine gute Idee, zu wissen, wie man diese einfacheren Lösungen erstellt.
Betreff: Dynamische Liste von Schaltflächen, die mit Skripten in einem Ordner verknüpft sind@jthi und @txnelson Wenn ich euch noch einmal dazu befragen dürfte:
Wie würde es aussehen, wenn ich ein Zahlenbearbeitungsfeld hinzufügen wollte, das den Wert für das Ausrichten-Feld enthält, und dann ein Schaltflächenfeld zum Drücken, das den Wert im Zahlenbearbeitungsfeld anwendet, um die Ausrichtung der Skriptschaltflächen im Fenster zu ändern?
Also so etwas

Betreff: Dynamische Liste von Schaltflächen, die mit Skripten in einem Ordner verknüpft sindDies könnte eine Idee geben, wie Sie es tun können
Names Default To Here(1);
init_cols = 4;
dir = "$SAMPLE_SCRIPTS/";
dir = Convert File Path(dir, windows);
files = Files In Directory(dir);
jslfiles = Filter Each({filename}, files, Word(-1, filename, ".") == "jsl");
// Not sure how you would like to determine column count, but with Lineup box it is fairly easy
lub = Lineup Box(N Col(init_cols));
For Each({filename}, jslfiles,
Eval(EvalExpr(
lub << Append(Button Box(filename,
nw = New Window(Expr(filename),
Script Box(Load Text File(Expr(dir || filename)), "JSL", 600, 600)
);
));
));
);
nw = New Window("Scripts in " || dir,
Outline Box("Click to Open a Script",
V List Box(
Lineup Box(N Col(2),
Button Box("Press to update Col count", << Set Function(function({this},
lub << N Col((this << sib) << get)
))),
Number Edit Box(init_cols)
),
lub
)
);
);
Das Nummernbearbeitungsfeld kann auch bei Commit (<< Set Function()) / Änderung (<< Set Number Changed()) ausgelöst werden, sodass Sie nicht unbedingt eine Schaltfläche benötigen