Die Unterhaltung
Ein Dialog ist ein Gespräch zwischen zwei Personen. Normalerweise führen zwei Personen Gespräche wie diese:
Diese beiden Personen tauschen Informationen auf eine Weise aus, die es ihnen ermöglicht, sich während des Gesprächs um andere Dinge zu kümmern.
Manchmal wechseln zwei Personen in einen Gesprächsmodus, in dem sie konzentrierter werden:
In diesem Modus ignoriert der Co-Pilot nun das Solitaire-Spiel und der Pilot ignoriert das Sandwich.
Ein Dialogfeld ist ein Fenster, in dem eine Person ein Gespräch mit einem Computer führt. JMP verfügt über zwei Arten von Dialogfeldern: modale und modale. Das Dialogfeld „Suchen/Ersetzen“ ist modusunabhängig. Es bleibt geöffnet und wechselt seinen Fokus so leicht zwischen den Fenstern, wie der Pilot von der Wirtschaft auf das Essen umgestiegen ist. Der Speicherdialog von JMP ist modal; Sobald JMP in den Modus zum Speichern einer Datei wechselt, kann nichts mehr im Weg stehen, bis die Datei gespeichert oder der Speichervorgang abgebrochen wird. JSL kann benutzerdefinierte Dialoge (modal oder modal) erstellen, um Ihnen einige Informationen zu geben und eine Antwort zu erhalten.
Antworten bekommen
Das Leben eines modalen Dialogfelds:
Punkt 1, den Baum erstellen, wird oft als Argument für die Funktion „Neues Fenster“ verwendet. Die Elemente 2 und 3 sind die Funktion „Neues Fenster“. Hier ist ein modaler Alarmbox-Dialog.
rdata = New Window( title, <<MODAL></MODAL>
<
Just thought you should know...Just thought you should know...Just thought you should know...Just thought you should know...Ich dachte nur, du solltest es wissen...
Der Zwei-Wege-Dialog dieses kleinen Fensters ist sehr einfach:
Es sind keine Daten zum Zurückgeben vorhanden. Die Funktion „Neues Fenster“ gibt einen Wert zurück. Es zeigt an, ob Sie die OK-Taste gedrückt haben
{Button( 1 )}
oder schloss das Fenster mit der vom Betriebssystem bereitgestellten Schaltfläche zum Schließen
{Button( -1 )}
Es wird eine Liste mit einem Element zurückgegeben. Sie können mithilfe von „Abbrechen“ oder „OK“ testen rdata["Button"] Das wird -1 oder 1 sein. Es ist Ihnen wahrscheinlich egal, da Sie im Dialogfeld keine Schaltfläche „ABBRECHEN“ eingefügt haben.
Vor langer Zeit hat JMP den Inhalt (Anzeigefelder) eines Fensters in eine interne Struktur namens „ Der Müll bevor Sie das Betriebssystem auffordern, das Fenster zu schließen.Der Müll haben sich im Laufe der Zeit weiterentwickelt, um viele Probleme zu lösen und manchmal unbeabsichtigte Nebenwirkungen hervorzurufen. Ein Nebeneffekt bestand darin, JSL die Anzeigefelder eines modalen Dialogs für eine Zeit zur Verfügung zu stellen kurz Zeit nach dem Schließen des Dialogs, und auf diese Weise haben einige Benutzer Antworten aus modalen Dialogen abgerufen ... und sie buchstäblich aus dem Papierkorb geholt.
Probleme mit Der Müll Es kommt darauf an, wie viel es füllt und wann es geleert werden muss. In früheren Versionen von JMP wurde der Papierkorb geleert, als das nächste Fenster angezeigt wurde, oder eine Variante davon. Wenn der Papierkorb geleert wird, ist sein Inhalt verschwunden und auch diese modalen Dialogfeldvariablen verschwinden. Meistens hat es funktioniert, aber es hat sich ständig weiterentwickelt und versucht, verschiedene Probleme zu lösen. Letztlich @hecht_jmp Ich habe eine hochmoderne Lösung in JMP eingefügt, die die Probleme mit dem Papierkorb löste ... erforderte jedoch einen etwas umfassenderen Plan, um Antworten aus modalen Dialogen zu erhalten.
Antworten auf die richtige Art und Weise erhalten
Wenn Sie weitere Daten zurückerhalten möchten, müssen Sie diese bei anfordern < :
rdata = New Window( "modal dialog test", <<MODAL></MODAL>
It said "Enter your name" before I typed over it.It said "Enter your name" before I typed over it.It said "Enter your name" before I typed over it.It said "Enter your name" before I typed over it.Es hieß „Geben Sie Ihren Namen ein“, bevor ich es überschrieben habe.
{answer = „Craige“, Button( 1 )}
Sie können verwenden rdata["Antwort"] nach dem Neues Fenster() kehrt zurück, um den Wert aus dem Textfeld in der Variablen abzurufen antworten . (Führen Sie zuerst den Abbruchtest durch.)
Ist eine Liste wie ein assoziatives Array?
Alle obigen Beispiele geben eine Liste zurück. Die Elemente in der Liste sehen alle wie einfache Zuweisungsanweisungen oder eine Art Funktionsaufruf aus. Eine wenig genutzte, aber wenig verstandene Funktion von JMP ist die Subskription von Listen mithilfe dieser Namen und nicht des üblicheren numerischen Index.
result = New Window( "Tell us about yourself", <<MODAL></MODAL>
Bob is about to press OKBob is about to press OKBob is about to press OKBob is about to press OKBob ist gerade dabei, auf „OK“ zu drücken
Der Wert im Ergebnis könnte sein
{name = „Bob“, title = „programmierer“, Button( 1 )}
oder, wenn Bob absagt,
{name = „Bob“, title = „programmierer“, Button( -1 )}
If( result["Button"] == 1, Write( Eval Insert( "\!n\[^result["name"]^ is a ^result["title"]^]\" ) ) , // else Write( "\!nthe dialog canceled." ) );
Bob ist Programmierer
Die Liste tut verhält sich ein wenig wie ein assoziatives Array, allerdings mit einer sequentiellen Suche. (Wenn Sie ein assoziatives Array benötigen, erstellen Sie eines. Verwenden Sie dieses Listenverhalten nicht ... es ist ein schlechter Ersatz.)
Modale Dialogsemantik
Wenn Ihr Benutzer in einem modalen Dialog auf die Schaltfläche „Abbrechen“ klickt, erwartet er, dass sich nichts ändert. Jede JSL in einem modalen Dialog sollte den Dialog bedienen, ohne Änderungen an Variablen im Rest Ihres Programms vorzunehmen. Hier ist ein größeres Beispiel; Es verfügt über einen modalen Dialog zum Starten von Berichten:
You can work in other windows while this window is open; it is a modeless dialog.You can work in other windows while this window is open; it is a modeless dialog.You can work in other windows while this window is open; it is a modeless dialog.You can work in other windows while this window is open; it is a modeless dialog.Während dieses Fenster geöffnet ist, können Sie in anderen Fenstern arbeiten. es ist ein modaler Dialog.
Jedes Mal, wenn Sie auf die Schaltfläche „Bericht erstellen“ klicken, öffnet sich ein weiteres Fenster:
A report showing the values from the modeless launcher.A report showing the values from the modeless launcher.A report showing the values from the modeless launcher.A report showing the values from the modeless launcher.Ein Bericht, der die Werte des moduslosen Launchers zeigt.
Es gibt auch eine Schaltfläche „Parameter festlegen“, die einen modalen Dialog mit einer Validierungsroutine öffnet. Durch diese Schaltfläche „Abbrechen“ werden keine Änderungen am obigen Launcher vorgenommen.
The validation routine opens yet another modal dialog.The validation routine opens yet another modal dialog.The validation routine opens yet another modal dialog.The validation routine opens yet another modal dialog.Die Validierungsroutine öffnet einen weiteren modalen Dialog.
// here's a simple modal window. It provides a warning, but no data is returned. alert = Function( {title, text, icon = "error"}, New Window( title, <<MODAL></MODAL>
Was ist ein modaler Dialog und wie schreibt man einen besseren?