La conversation
Un dialogue est une conversation entre deux personnes. Deux personnes ont généralement des conversations comme celle-ci :
Ces deux personnes échangent des informations d'une manière qui leur permet de s'occuper d'autres choses pendant la conversation.
Parfois, deux personnes passent à un mode conversationnel qui devient très ciblé :
Dans ce mode, le copilote ignore maintenant le jeu Solitaire et le pilote ignore le sandwich.
Une boîte de dialogue est une fenêtre dans laquelle une personne a une conversation avec un ordinateur. JMP propose deux types de boîtes de dialogue : non modale et modale. La boîte de dialogue Rechercher/Remplacer est non modale ; il reste ouvert et passe d'une fenêtre à l'autre aussi facilement que le pilote est passé de l'économie à la nourriture. La boîte de dialogue d'enregistrement de JMP est modale ; une fois que JMP entre en mode d'enregistrement de fichier, rien d'autre ne peut gêner jusqu'à ce que le fichier soit enregistré ou que l'enregistrement soit annulé. JSL peut créer des boîtes de dialogue personnalisées, non modales ou modales, pour vous donner des informations et obtenir une réponse en retour.
Obtenir des réponses
La vie d'une boîte de dialogue modale :
L'élément 1, construire l'arborescence, est souvent utilisé comme argument de la fonction Nouvelle fenêtre. Les éléments 2 et 3 sont la fonction Nouvelle fenêtre. Voici une boîte de dialogue modale de boîte d'alerte.
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...Je me suis dit qu'il fallait que tu le saches...
La boîte de dialogue bidirectionnelle de cette petite fenêtre est très simple :
Il n'y a pas de données à retourner. La fonction Nouvelle fenêtre renvoie une valeur ; il indique si vous avez appuyé sur le bouton OK
{Button( 1 )}
ou fermé la fenêtre avec le bouton de fermeture fourni par le système d'exploitation
{Button( -1 )}
Il renvoie une liste avec un élément. Vous pouvez tester Annuler vs OK en utilisant rdata["Bouton"] qui sera -1 ou 1. Vous ne vous en souciez probablement pas puisque vous n'avez pas mis de bouton ANNULER dans la boîte de dialogue.
Il y a longtemps, JMP plaçait le contenu (boîtes d'affichage) d'une fenêtre dans une structure interne appelée La poubelle avant de demander au système d'exploitation de fermer la fenêtre.La poubelle évolué au fil du temps pour résoudre de nombreux problèmes et parfois créer des effets secondaires imprévus. Un effet secondaire était de rendre les boîtes d'affichage d'une boîte de dialogue modale disponibles pour JSL pour une court temps après la fermeture de la boîte de dialogue, et c'est ainsi que certains utilisateurs ont récupéré les réponses des boîtes de dialogue modales... en les sortant littéralement de la corbeille.
Problèmes avec La poubelle tourner autour de combien il se remplit et quand le vider. Dans les premières versions de JMP, la corbeille était vidée lors de l'affichage de la fenêtre suivante, ou d'une variante. Lorsque la corbeille est vidée, son contenu disparaît et ces variables de boîte de dialogue modale disparaissent également. Cela fonctionnait la plupart du temps, la plupart du temps, mais cela continuait d'évoluer, essayant de résoudre divers problèmes. Finalement @hecht_jmp mettre une solution de pointe dans JMP qui a résolu les problèmes avec la corbeille... mais a nécessité un peu plus d'un plan pour obtenir des réponses à partir des boîtes de dialogue modales.
Obtenir des réponses de la bonne manière
Si vous voulez que plus de données soient renvoyées, vous devez en faire la demande avec < :
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.Il disait "Entrez votre nom" avant que je ne l'écrase.
{réponse = "Craige", Bouton( 1 )}
Vous pouvez utiliser rdata["réponse"] après le Nouvelle fenetre() revient pour obtenir la valeur de la zone de texte dans la variable répondre . (Faites d'abord le test d'annulation.)
Une liste ressemble-t-elle à un tableau associatif ?
Tous les exemples ci-dessus renvoient une liste. Les éléments de la liste ressemblent tous à de simples instructions d'affectation ou à une sorte d'appel de fonction. Une fonctionnalité peu utilisée et mal comprise de JMP consiste à inscrire des listes en utilisant ces noms, plutôt que l'index numérique plus habituel.
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 est sur le point d'appuyer sur OK
La valeur du résultat peut être
{name = "Bob", title = "programmeur", Button( 1 )}
ou, si Bob annule,
{name = "Bob", title = "programmeur", Button( -1 )}
If( result["Button"] == 1, Write( Eval Insert( "\!n\[^result["name"]^ is a ^result["title"]^]\" ) ) , // else Write( "\!nthe dialog canceled." ) );
Bob est un programmeur
La liste fait agir un peu comme un tableau associatif, même si cela se fait avec une recherche séquentielle. (Si vous avez besoin d'un tableau associatif, créez-en un. N'utilisez pas ce comportement de liste... c'est un piètre substitut.)
Sémantique du dialogue modal
Lorsque votre utilisateur appuie sur le bouton d'annulation d'une boîte de dialogue modale, il s'attend à ce que rien ne soit modifié. Tout JSL dans une boîte de dialogue modale doit utiliser la boîte de dialogue sans apporter de modifications aux variables dans le reste de votre programme. Voici un exemple plus grand; il a une boîte de dialogue non modale pour lancer des rapports :
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.Vous pouvez travailler dans d'autres fenêtres pendant que cette fenêtre est ouverte ; c'est un dialogue non modal.
Chaque fois que vous appuyez sur le bouton Make Report, une autre fenêtre s'ouvre :
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.Un rapport montrant les valeurs du lanceur sans mode.
Il existe également un bouton Définir les paramètres qui ouvre une boîte de dialogue modale avec une routine de validation. Ce bouton d'annulation n'appliquera aucune modification au lanceur ci-dessus.
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.La routine de validation ouvre encore une autre boîte de dialogue modale.
// 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>
Qu'est-ce qu'un dialogue modal et comment en écrire un meilleur.