Wie aktualisiere ich Anzeigefelder in JMP?Hallo,
Ich habe ein Anzeigefeld (Textfeld), das ich in einer for-Schleife aktualisieren möchte.
Ich sehe, dass ich das Textfeld in der Schleife nicht zuverlässig aktualisieren kann.
Das ist wirklich ärgerlich, weil ich viele Dateien verarbeiten muss und das nicht möglich ist
Überprüfen Sie die Laufwerke immer physisch, um festzustellen, ob Dateien verarbeitet werden.
Ich verwende Wait(0), damit jmp aufholen kann. Ich habe es mit Busy Light versucht
auch das hat das gleiche Problem. Am Ende wird alles aktualisiert.
Ich habe auch Wait(1) ausprobiert, was funktioniert, aber wiederum nicht so zuverlässig.
Wie kann ich eine einfache Textfeld-Statusaktualisierung erstellen?
Vielen Dank für Ihre Beiträge!
Betreff: Wie aktualisiere ich Anzeigefelder in JMP?Ja, ich habe sie gesehen. Der Fortschrittsbalken ist ordentlich. Es erscheint jedoch auch in einem neuen Fenster und funktioniert nicht gut, wenn Sie versuchen, alles in einem einzigen Fenster zu reparieren. Aber vielversprechend. Ich werde versuchen herauszufinden, ob ich es irgendwie in meiner Benutzeroberfläche zum Laufen bringen kann. Die andere Methode ist einfach eine Textfeldmethode, die, wie bereits erwähnt, zumindest in meinem Fall nicht funktioniert.Ich schätze, das Problem liegt tatsächlich darin, dass nicht genügend Zeit für die Aktualisierung der Anzeige vorhanden ist, falls die for-Schleife zu viele Dinge enthält (ein Beitrag erwähnte etwas, das damit zu tun hat, dass Windows die Anzeigefelder nicht rechtzeitig aktualisieren kann). Die Textfeldmethode funktioniert, wenn ich länger warte. Eine Wartezeit von 0 funktioniert nicht immer (was bedeutet, dass oft alles aktualisiert wird, nachdem die for-Schleife beendet ist).
Ich werde versuchen, einen allgemeinen Fortschrittstracker zu erstellen, der zuverlässig aktualisiert werden kann. Wenn es mir gelingt, werde ich noch einmal posten.
Vielen Dank für Ihre Hilfe und Geduld!
Betreff: Wie aktualisiere ich Anzeigefelder in JMP?Ich habe in diesem Forum nach „Fortschrittsbalken“ gesucht und zwei nützliche Links gefunden:
Schauen Sie sich den Code an @msharp Hier: So zeigen Sie den Fortschrittsbalken anstelle des Öffnens und Schließens von Zwischentabellen an
Ähnlicher Code von @SDF1 Hier: Vorschlag zum Erstellen eines Skripts für ein kleines Aktualisierungs-/Fortschrittsfenster für die Modellierung
Betreff: Wie aktualisiere ich Anzeigefelder in JMP?Danke. Der von Ihnen bereitgestellte Ausschnitt funktioniert natürlich, aber ich suche nach etwas, das ich kann
in meine Benutzeroberfläche integrieren. Ich möchte keine Popup-Nachricht anzeigen. Es gibt viele Elemente in meiner Benutzeroberfläche
die diese Statusfunktion erfordern und deshalb möchte ich etwas, das ich zu meinem New Window() hinzufügen kann
als Anzeigefeld und Nutzung als Statusleiste.
Ich suche so etwas:
cap = "";
some_test_function = Function({},
Show("What?");
for (i = 1, i <= 1000000, i++,
if (mod(i, 1000) == 0,
//Something like this!!! Not working of course.
cap << Set Text("Processing " || char(i) || " records");
wait(0);
);
k = i^3;
l = k * 4 + i^4;
);
);
nw = New Window("test",
bb = Button Box("test caption", some_test_function),
cap = caption("processing"),
);Ich habe auch versucht, das Besetztlicht zu verwenden, aber das hat das gleiche Problem. Darüber hinaus weiß ich nicht, ob der obige Teil, wenn er korrigiert wird, funktioniert, wenn in der for-Schleife viele Tabellenoperationen statt einer einfachen Zählung vorhanden sind. Vielleicht muss ich warten, vielleicht. Deshalb bleibe ich bei der Option „Textfeld“.
Ich würde jede andere Lösung sehr schätzen, die in einem UI-Szenario verwendet werden kann, in dem mehrere Elemente Zugriff auf dasselbe Statusanzeigefeld haben.
Danke!
Betreff: Wie aktualisiere ich Anzeigefelder in JMP?Wenn Sie dem Benutzer den Bearbeitungsstatus anzeigen, möchten Sie möglicherweise die Beschriftungsfunktion anstelle eines Textfelds ausprobieren.
for (i = 1, i <= 1000000, i++,
if (mod(i, 1000) == 0,
caption("Processing " || char(i) || " records");
wait(0);
);
k = i^3;
l = k * 4 + i^4;
);
caption(remove);
wait(0);Betreff: Wie aktualisiere ich Anzeigefelder in JMP?Danke für deinen Kommentar. Tatsächlich weiß ich das. Der Code, den Sie mir gegeben haben, generiert lediglich ein Fenster mit einer Zahl.
Ich schätze, es wird die letzte Nummer gedruckt, da alles sehr schnell geht.
Ich mache so etwas wie das, was Sie gezeigt haben: Eine Schleife mit einer Reihe von Tabellenmanipulationen darin und einer Textaktualisierung bei
dann Ende der Schleife. Wenn ich „zuverlässig“ sage, meine ich, dass sich der Text ändern sollte, wenn ich am Ende der for-Schleife ein Update einfüge
in diesem Moment.Oft ist nur das letzte Update sichtbar.
Was ich jetzt tatsächlich als funktionierend befunden habe, habe ich einem anderen Beitrag entnommen (ich weiß nicht, welcher, da ich mir einige davon angeschaut habe).
Grundsätzlich kann man also ein Textfeld in einer Schleife erstellen und löschen. Irgendwie wird durch das Aktualisieren des Textes das Textfeld nicht aktualisiert, was seltsam ist.
Wie auch immer, im Moment funktioniert es für mich, das Textfeld zu löschen und an der genauen Stelle mit einem neuen Text neu zu erstellen.
Vielen Dank für Ihre Beiträge!
Betreff: Wie aktualisiere ich Anzeigefelder in JMP?Wahrscheinlich sind weitere Details erforderlich, um den Kommentar „Aktualisierung nicht zuverlässig möglich“ zu verstehen. Der folgende Code zeigt die Idee, aber ich vermute, dass Sie das bereits wissen. Beachten Sie, dass „Wait()“ in JSL im Allgemeinen vermieden werden sollte und hier lediglich die Dauer einer anderen Verarbeitung simuliert wird.
NamesDefaultToHere(1);
nw = NewWindow("Update Text Box", tb = TextBox(Char(Today())), << sizeWindow(400, 200));
for(t=1, t<=10, t++,
/// Simulate some activity that takes time
delay = RandomInteger(1, 5);
Wait(delay);
// Update the Text Box
tb << setText(Char(Today()));
Beep();
);