Die Unterhaltung
Ein Dialog ist ein Gespräch zwischen zwei Personen. Zwei Personen führen normalerweise Gespräche wie folgt:
- Pilot: (stellt das Sandwich wieder auf das Tablett) "Was denkst du über die Wirtschaft?"
- Co-Pilot: (sieht nicht vom Telefon auf) "Ich brauche eine Gehaltserhöhung, was ist mit dir?"
- Pilot: (Knoblauchbrotkrümel aufwischen) "Nun, ich esse diese Woche im Fünf-Sterne-Hotel."
- Co-Pilot: (betrachtet das Spiel stirnrunzelnd) "Ihre Hühnersuppe ist lecker."
Diese beiden Personen tauschen Informationen so aus, dass sie sich während des Gesprächs um andere Dinge kümmern können.
Manchmal wechseln zwei Personen in einen Konversationsmodus, der stark fokussiert wird:
- Pilot: "Uns geht das Benzin aus."
- Co-Pilot: "Wechseln Sie zum anderen Panzer."
- Pilot: "Habe das vor einer Stunde gemacht."
- Co-Pilot: „Das ist nicht gut. Wir werden noch eine Stunde über Wasser sein."
- Pilot: "Ich habe eine Idee, aber sie wird dir nicht gefallen."
In diesem Modus ignoriert der Co-Pilot jetzt 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: moduslos und modal. Der Suchen/Ersetzen-Dialog ist nicht modal; es bleibt offen und wechselt seinen Fokus zwischen den Fenstern genauso leicht wie der Pilot von der Sparsamkeit auf die Nahrung umgeschaltet hat. Der Speicherdialog von JMP ist modal; Sobald JMP in den Save-a-File-Modus wechselt, steht nichts mehr im Weg, bis die Datei gespeichert oder das Speichern abgebrochen wird. JSL kann benutzerdefinierte Dialoge erstellen, modal oder modal, um Ihnen einige Informationen zu geben und eine Antwort zu erhalten.
Antworten bekommen
Die Lebensdauer eines modalen Dialogfelds:
- Erstellen Sie einen Display-Box-Baum
- Öffnen Sie ein Fenster, um es zu besitzen und den Anzeigekastenbaum anzuzeigen
- Warten Sie, bis sich das Fenster schließt
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 modales Dialogfeld für eine Warnbox.
rdata = New Window( title, <<MODAL></MODAL>
<
Dachte nur, du solltest es wissen...
Der Zwei-Wege-Dialog dieses kleinen Fensters ist sehr einfach:
- JMP: „Wach auf! Diese Sache ist passiert!"
- Du bist ok"
Es sind keine Daten zurückzugeben. 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 Schließen-Schaltfläche
{Button( -1 )}
Es gibt eine Liste mit einem Element zurück. Sie können auf Abbrechen vs. OK testen mit rdata["Schaltfläche"] was -1 oder 1 sein wird. Es ist Ihnen wahrscheinlich egal, da Sie keine ABBRECHEN-Schaltfläche in das Dialogfeld eingefügt haben.
Mehr sehen...Sie müssen nicht nur den Titel und den Text angeben, sondern auch ein Symbol. Ich mag das Add-In für integrierte Symbole für ein schnelles Projekt wie dieses. Sie können bei Bedarf auch benutzerdefinierte Bitmaps erstellen.
@Justin_Chilton Eingebaute JMP-Symbole
Das Symbol "Fehler" ist auf dem Mac möglicherweise nicht vorhanden. oder ein Warnsymbol einer anderen Größe
Warnung!
Der Müll
Vor langer Zeit hat JMP den Inhalt (Anzeigeboxen) eines Fensters in eine interne Struktur namens Der Müll bevor Sie das Betriebssystem bitten, das Fenster zu schließen.Der Müll im Laufe der Zeit entwickelt, um viele Probleme zu lösen und manchmal unbeabsichtigte Nebenwirkungen zu verursachen. Ein Nebeneffekt war, dass JSL die Anzeigefelder eines modalen Dialogs für a kurz Zeit, nachdem der Dialog geschlossen wurde, und so haben einige Benutzer Antworten aus modalen Dialogen abgerufen ... buchstäblich aus dem Papierkorb geholt.
- Pilot: (wirft eine Serviette mit Knoblauchkrumen in den Müll) "mmmm. gut."
- Co-Pilot: (Nase kräuseln) "Ich glaube, das werde ich jetzt leeren. Oder vielleicht in Kürze."
Probleme mit Der Müll drehen Sie sich darum, wie viel es füllt und wann es geleert werden muss. In früheren Versionen von JMP wurde der Papierkorb geleert, wenn das nächste Fenster angezeigt wurde, oder eine andere Variante. Wenn der Papierkorb geleert wird, ist sein Inhalt weg und diese modalen Dialogfeldvariablen verschwinden ebenfalls. Es funktionierte meistens, die meiste Zeit, aber es entwickelte sich ständig weiter und versuchte, verschiedene Probleme zu lösen. Letztlich @hecht_jmp fügen Sie eine hochmoderne Lösung in JMP ein, die die Probleme mit dem Papierkorb löste ... erforderte jedoch einen etwas größeren Plan, um Antworten aus modalen Dialogfeldern zu erhalten.
Antworten richtig bekommen
Wenn Sie mehr Daten zurückgeben möchten, müssen Sie dies mit anfragen < :
rdata = New Window( "modal dialog test",
<<MODAL></MODAL>
Es sagte "Geben Sie Ihren Namen ein", bevor ich es überschrieb.
{Antwort = "Craige", Schaltfläche( 1 )}
Sie können verwenden rdata["Antwort"] nach dem Neues Fenster() kehrt zurück, um den Wert aus dem Textfeld in der Variablen zu erhalten 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 aus wie einfache Zuweisungsanweisungen oder eine Art Funktionsaufruf. Eine wenig genutzte, wenig verstandene Funktion von JMP ist das Indizieren von Listen, die diese Namen anstelle des üblicheren numerischen Index verwenden.
result = New Window( "Tell us about yourself",
<<MODAL></MODAL>
Bob ist im Begriff, OK zu drücken
Der Wert im Ergebnis könnte sein:
{Name = "Bob", Titel = "Programmierer", Button( 1 )}
oder, wenn Bob absagt,
{Name = "Bob", Titel = "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 verhalten sich ein wenig wie ein assoziatives Array, obwohl dies mit einer sequentiellen Suche erfolgt. (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 Dialogfeld auf die Schaltfläche Abbrechen drückt, erwartet er, dass nichts geändert wird. Jede JSL in einem modalen Dialog sollte den Dialog bedienen, ohne Änderungen an den Variablen im Rest Ihres Programms vorzunehmen. Hier ist ein größeres Beispiel; Es hat einen modalen Dialog zum Starten von Berichten:
Sie können in anderen Fenstern arbeiten, während dieses Fenster geöffnet ist; es ist ein modaler Dialog.
Jedes Mal, wenn Sie die Schaltfläche Bericht erstellen drücken, öffnet sich ein weiteres Fenster:
Ein Bericht mit den Werten des moduslosen Launchers.
Es gibt auch eine Schaltfläche Parameter setzen, die einen modalen Dialog mit einer Validierungsroutine öffnet. Mit dieser Schaltfläche zum Abbrechen werden keine Änderungen am obigen Launcher vorgenommen.
Die Validierungsroutine öffnet einen weiteren modalen Dialog.
- Pilot: (schielt) "Das sieht kompliziert aus!"
- Co-Pilot: „Wir schaffen das. Es hat Kommentare!"
// 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>