La conversación
Un diálogo es una conversación entre dos personas. Dos personas suelen tener conversaciones como esta:
- Piloto: (volviendo a poner el sándwich en la bandeja) "¿Qué opinas de la economía?"
- Copiloto: (sin levantar la vista del teléfono) "Necesito un aumento, ¿y tú?"
- Piloto: (limpiando las migas de pan de ajo) "Bueno, comeré en el cinco estrellas esta semana".
- Copiloto: (frunciendo el ceño ante el juego) "Su sopa de pollo es sabrosa".
Esas dos personas están intercambiando información de una manera que les permite ocuparse de otras cosas durante la conversación.
A veces, dos personas cambian a un modo de conversación que se enfoca mucho:
- Piloto: "Nos estamos quedando sin gasolina".
- Copiloto: "Cambia al otro tanque".
- Piloto: "Hice eso hace una hora".
- Copiloto: "Esto no es bueno. Estaremos sobre el agua durante otra hora ".
- Piloto: "Tengo una idea, pero no te va a gustar".
En este modo, el copiloto ahora ignora el juego Solitario y el piloto ignora el sándwich.
Un cuadro de diálogo es una ventana donde una persona tiene una conversación con una computadora. JMP tiene dos tipos de cuadros de diálogo: no modal y modal. El cuadro de diálogo buscar / reemplazar no tiene modo; permanece abierto y cambia su enfoque entre ventanas tan fácilmente como el piloto cambia de economía a comida. El cuadro de diálogo de guardado de JMP es modal; una vez que JMP ingresa al modo de guardar un archivo, nada más puede interponerse hasta que se guarde el archivo o se cancele el guardado. JSL puede crear cuadros de diálogo personalizados, sin modo o modal, para brindarle información y obtener una respuesta.
Obteniendo respuestas
La vida de un cuadro de diálogo modal:
- Construye un árbol de cajas de exhibición
- Abra una ventana para poseer y mostrar el árbol del cuadro de visualización
- Espera a que se cierre la ventana
El elemento 1, construir el árbol, a menudo se utiliza como argumento para la función Ventana nueva. Los elementos 2 y 3 son la función Nueva ventana. Aquí hay un cuadro de diálogo modal de cuadro de alerta.
rdata = New Window( title, <<MODAL></MODAL>
<< modal es la magia que hace que esta sea una ventana modal que espera a que la ventana se cierre antes de ejecutar la siguiente instrucción.
Solo pensé que deberías saber ...
El diálogo bidireccional de esta pequeña ventana es muy simple:
- JMP: "¡Despierta! ¡Esto pasó! "
- Estás bien"
No hay datos para devolver. La función Nueva ventana devuelve un valor; indica si presionó el botón OK
{Button( 1 )}
o cerró la ventana con el botón de cierre proporcionado por el sistema operativo
{Button( -1 )}
Devuelve una lista con un elemento. Puede probar Cancelar vs Aceptar usando rdata ["Botón"] que será -1 o 1. Probablemente no le importe, ya que no puso un botón CANCELAR en el cuadro de diálogo.
Ver más...No solo necesita proporcionar el título y el texto, también necesita un icono. Me gusta el complemento para íconos integrados para un proyecto rápido como este. También puede crear mapas de bits personalizados, si los necesita.
@Justin_Chilton Iconos JMP integrados
Es posible que el icono "Error" no exista en Mac. o un icono de advertencia de diferente tamaño
¡advertencia!
La basura
Hace mucho tiempo, JMP colocó el contenido (cuadros de visualización) de una ventana en una estructura interna llamada La basura antes de pedirle al sistema operativo que cierre la ventana.La basura evolucionó con el tiempo para resolver muchos problemas y, a veces, crear efectos secundarios no deseados. Un efecto secundario fue hacer que los cuadros de visualización de un diálogo modal estén disponibles para JSL para un pequeño tiempo después de que se cerró el diálogo, y así fue como algunos usuarios recuperaron las respuestas de los diálogos modales ... literalmente sacándolas de la papelera.
- Piloto: (tirando una servilleta con migas de ajo a la basura) "mmmm. Bien".
- Copiloto: (arrugando la nariz) "Creo que lo vaciaré ahora. O tal vez en un momento ".
Problemas con La basura giran en torno a cuánto se llena y cuándo vaciarlo. En las primeras versiones de JMP, la papelera se vaciaba cuando se mostraba la siguiente ventana, o alguna variación. Cuando se vacía la papelera, su contenido desaparece y esas variables del cuadro de diálogo modal también desaparecen. En su mayoría funcionó, la mayor parte del tiempo, pero siguió evolucionando, tratando de resolver varios problemas. Finalmente @hecht_jmp puso una solución de vanguardia en JMP que resolvió los problemas con la basura ... pero requirió un poco más de un plan para obtener respuestas de los diálogos modales.
Obteniendo respuestas de la manera correcta
Si desea que se devuelvan más datos, debe solicitarlos con << devolver resultado :
rdata = New Window( "modal dialog test",
<<MODAL></MODAL>
Decía "Ingresa tu nombre" antes de que lo escribiera.
{answer = "Craige", Botón (1)}
Puedes usar rdata ["respuesta"] después de la Nueva ventana() vuelve a obtener el valor del cuadro de texto en la variable respuesta . (Haga primero la prueba de cancelación).
¿Es una lista como una matriz asociativa?
Todos los ejemplos anteriores devuelven una lista. Todos los elementos de la lista parecen simples instrucciones de asignación o algún tipo de llamada a función. Una característica poco utilizada y poco entendida de JMP es la inclusión de listas de subíndices con esos nombres, en lugar del índice numérico más habitual.
result = New Window( "Tell us about yourself",
<<MODAL></MODAL>
Bob está a punto de presionar OK
El valor en el resultado puede ser
{nombre = "Bob", título = "programador", Botón (1)}
o, si Bob cancela,
{nombre = "Bob", título = "programador", Botón (-1)}
If( result["Button"] == 1,
Write( Eval Insert( "\!n\[^result["name"]^ is a ^result["title"]^]\" ) )
, // else
Write( "\!nthe dialog canceled." )
);
Bob es programador
La lista lo hace actúa un poco como una matriz asociativa, aunque se realiza con una búsqueda secuencial. (Si necesita una matriz asociativa, cree una. No use este comportamiento de lista ... es un mal sustituto).
Semántica de diálogo modal
Cuando su usuario presiona el botón cancelar en un cuadro de diálogo modal, no esperan que se cambie nada. Cualquier JSL en un diálogo modal debería estar operando el diálogo sin realizar cambios en las variables en el resto de su programa. Aquí hay un ejemplo más grande; tiene un diálogo no modal para lanzar informes:
Puede trabajar en otras ventanas mientras esta ventana está abierta; es un diálogo no modal.
Cada vez que presiona el botón Crear informe, se abre otra ventana:
Un informe que muestra los valores del lanzador no modal.
También hay un botón Establecer parámetros que abre un cuadro de diálogo modal con una rutina de validación. Este botón de cancelación no aplicará ningún cambio al lanzador anterior.
La rutina de validación abre otro diálogo modal.
- Piloto: (entrecerrando los ojos) "¡Esto parece complicado!"
- Copiloto: "Podemos hacer esto. ¡Tiene comentarios! "
// 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>