La conversation
Un dialogue est une conversation entre deux personnes. Deux personnes ont généralement des conversations comme celle-ci :
- Pilote : (remet le sandwich sur le plateau) « Que penses-tu de l'économie ?
- Copilote : (sans lever les yeux du téléphone) « J'ai besoin d'une augmentation, et vous ? »
- Pilote : (essuyant les miettes de pain à l'ail) "Eh bien, je vais manger au cinq étoiles cette semaine."
- Copilote : (fronçant les sourcils en voyant le jeu) « Leur soupe au poulet est savoureuse. »
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 concentré :
- Pilote : "Nous manquons d'essence."
- Co-pilote : « Passez à l'autre réservoir. »
- Pilote : "C'est fait il y a une heure."
- Copilote : "Ce n'est pas bien. Nous serons au-dessus de l'eau pendant encore une heure."
- Pilote : "J'ai une idée, mais tu ne vas pas l'aimer."
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 à l'alimentation. La boîte de dialogue de sauvegarde de JMP est modale ; une fois que JMP passe en mode d'enregistrement de fichier, rien d'autre ne peut gêner tant que le fichier n'est pas enregistré ou que l'enregistrement n'est pas 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.
Obtenir des réponses
La vie d'une boîte de dialogue modale :
- Construire un arbre de la boîte d'affichage
- Ouvrir une fenêtre à posséder et afficher l'arborescence de la boîte d'affichage
- Attendez que la fenêtre se ferme
L'élément 1, construire l'arbre, 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>
<
Je me suis dit qu'il fallait que tu le saches...
Le dialogue bidirectionnel de cette petite fenêtre est très simple :
- JMP : « Réveillez-vous ! Cette chose est arrivée !"
- Ça va"
Il n'y a aucune donnée à renvoyer. 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.
Voir plus...Non seulement vous devez fournir le titre et le texte, vous avez besoin d'une icône. J'aime le complément pour les icônes intégrées pour un projet rapide comme celui-ci. Vous pouvez également créer des bitmaps personnalisés, si vous en avez besoin.
@Justin_Chilton Icônes JMP intégrées
L'icône "Erreur" n'existe peut-être pas sur le Mac. ou une icône d'avertissement d'une taille différente
Attention!
La poubelle
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 créer parfois des effets secondaires inattendus. Un effet secondaire était de rendre les boîtes d'affichage d'une boîte de dialogue modales disponibles pour JSL pendant un 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... les sortant littéralement de la corbeille.
- Pilote : (jetant une serviette en miettes d'ail dans la poubelle) "mmmm. bien."
- Co-pilote : (ronde le nez) « Je pense que je vais vider ça maintenant. Ou peut-être dans un moment."
Problèmes avec La poubelle tournent autour de combien il se remplit et quand le vider. Dans les premières versions de JMP, la corbeille était vidée lorsque la fenêtre suivante s'affichait, ou une variante. Lorsque la corbeille est vidée, son contenu a disparu et ces variables de boîte de dialogue modales 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 mis une solution de pointe dans JMP qui résolvait les problèmes de la corbeille... mais nécessitait un peu plus de plan pour obtenir des réponses à partir des boîtes de dialogue modales.
Obtenir des réponses de la bonne manière
Si vous souhaitez que plus de données soient renvoyées, vous devez le demander avec < :
rdata = New Window( "modal dialog test",
<<MODAL></MODAL>
Il a dit "Entrez votre nom" avant que je l'aie tapé dessus.
{réponse = "Craige", Bouton( 1 )}
Vous pouvez utiliser rdata["réponse"] après le Nouvelle fenetre() retourne pour obtenir la valeur de la zone de texte dans la variable réponse . (Faites d'abord le test d'annulation.)
Une liste est-elle comme 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 est l'indexation 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 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 Est-ce que agit un peu comme un tableau associatif, bien que cela soit 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 mauvais substitut.)
Sémantique de dialogue modal
Lorsque votre utilisateur appuie sur le bouton Annuler dans 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 faire fonctionner la boîte de dialogue sans apporter de modifications aux variables dans le reste de votre programme. Voici un exemple plus grand ; il dispose d'une boîte de dialogue non modale pour lancer des rapports :
Vous pouvez travailler dans d'autres fenêtres pendant que cette fenêtre est ouverte ; c'est un dialogue sans mode.
Chaque fois que vous appuyez sur le bouton Créer un rapport, une autre fenêtre s'ouvre :
Un rapport montrant les valeurs du lanceur non modal.
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.
La routine de validation ouvre encore une autre boîte de dialogue modale.
- Pilote : (louchement) "Ça a l'air compliqué !"
- Copilote : « Nous pouvons le faire. Il y a des commentaires !"
// 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>