Nuestro propio tutorial sobre MetaCard

El presente punto es el resultado del trabajo realizado por Víctor J. Mazcuñán titulado "Tutorial para iniciarse con la herramienta MetaCard". El trabajo se basa en responder, de una forma lo más próxima al entorno de trabajo de MetaCard , a las preguntas que durante los últimos cursos se han realizado en exámenes respecto a la utilización y propósito de esta herramienta. Yo he hecho algún añadido, las he incluido en este texto y he hecho alguna pequeña corrección de ortografía; así que os dejo con las propias palabras de Víctor.

La aplicación realizada se estructura en base a la interfaz que el propio MetaCard utiliza para agrupar los tutoriales que incorpora y que se muestra en la Figura 1-21.

Figura 1-21. Índice de la aplicación recopilatoria de ejercicios de examen.

El código y el aprendizaje ya empieza aquí, para realizarlo se ha tomado muestra de la pila indicada y, concretando, tenemos que cada botón ejecuta casi el mismo código, así que sólo mostraré el primero:

on mouseUp
  go to stack "Pregunta 1"
end mouseUp

local wheat
on mouseEnter
  set the backColor of me to wheat
  set the backColor of me to orange
  set the visible of field "f1" to true
end mouseEnter

on mouseLeave
  set the backColor of me to wheat
  set the visible of field "f1" to false
end mouseLeave
                    

Es una pena que no se haya hecho nada para simplicarlo, puesto que todo botón hace esto mismo, sólo que abre una pila diferente y muestra (u oculta) un texto diferente. Pero para el punto en que estamos lo vamos a dar por bueno. Más adelante, en este propio tutorial, haremos uso de nombres de controles que se instanciarán en ejecución a ...

Reproducir un fichero

Desarrolla un script en MetaCard que permita reproducir un fichero de audio cuyo nombre se haya introducido en un campo de texto. Esta opción se realizará al activar un boton con la etiqueta "Reproducir".

El primer paso es crear una nueva tarjeta, al hacerlo se abrirá una ventana de diálogo en la que pondremos el nombre que corresponda a nuestra pila, también elegir un tamaño apropiado para la pila. A continuación con button tool colocaremos el botón donde creamos oportuno y lo mismo con field tool para crear un campo de texto.

Haciendo doble click sobre el campo de texto se abrirá la ventana de sus propiedades, pongámosle un nombre apropiado porque luego lo utilizaremos. También adecuar su apariencia a vuestro gusto. También crearemos un player con player tool, que sirve para reproducir audio o vídeo con él o en él respectivamente. Como es para audio con "Control Browser" lo haremos no visible. En dicho player en la propiedad file name deberíamos decirle el archivo a reproducir, pero lo haremos en el script ya que queremos escoger uno en cada momento.

El siguiente paso es realizar un script para el botón y modificar sus propiedades. Pongámosle el nombre "reproducir" y modificar la apariencia a vuestro gusto. Cuando eso ya esté, en la pestaña behavior hay un botón que tiene como etiqueta la palabra script, pulsar dicho botón.

Aparecerá un editor de texto en el cual se introducen las instrucciones que los componentes deberán realizar, en él hay dos instrucciones que hacen referencia a un evento,

on mouseUp
y
end mouseUp
hacen referencia a cuando se pulsa el botón y la segunda marca el fin de las instrucciones para dicho evento. En medio de estas, deberemos colocar las instrucciones necesarias para que el botón realice lo que nosotros queremos.

Para elegir el archivo a reproducir utilizaremos la orden set, que sirve para darle valores a las propiedades de los objetos, en este caso la propiedad a modificar del player es fileName. Otra propiedad a utilizar es text del campo de texto, con esto ya podéis construir la orden para que el player "apunte" al archivo deseado.

Para la puesta en marcha del reproductor debéis utilizar la orden start. Con la ayuda del Metatalk Reference ya deberíais poder realizar con éxito este ejercicio, además tenéis un ejemplo del mismo.

Suerte.

Figura 1-22. Descripción del ejercicio sobre cómo reproducir un fichero de audio (imagen de la izquierda) y una posible implementación de este ejercicio (derecha).

En la mayor parte de las tarjetas se utilizan un par de botones como los que se ven aquí con el logotipo del W3C, para obtener una versión HTML en disco del contenido de las tarjetas y otro con un icono de un bloc de notas, para obtener una salida en texto plano. Estos botones utilizan, respectivamente, el siguiente código:

#
#
#
on mouseUp
  ask file "Tria el fitxer on guardar el contingut del tutorial ..." with "texto1.html"
  if  it is not "Cancel" and it is not empty
  then
    put  empty into url ("file:" & it)
    repeat with i = 1 to the number of cards of this stack
      put the htmlText of field "memoria" of card i & return after url ("file:" & it)
    end repeat
  end if
end mouseUp

#
#
#
on mouseUp
  ask file "Tria el fitxer on guardar el contingut del tutorial ..." with "texto1.txt"
  if  it is not "Cancel" and it is not empty
  then
    put  empty into url ("file:" & it)
    repeat with i = 1 to the number of cards of this stack
      put the Text of field "memoria" of card i & return after url ("file:" & it)
    end repeat
  end if
end mouseUp

#
# Botón "Ver ejemplo"
#
on mouseUp
  go to stack "Reproductor"
end mouseUp
                    

Y la pila del ejemplo es únicamente el del botón encargado de reproducir el fichero cuyo nombre haya sido tecleado:

#
# Botón "Reproducir"
#
on mouseUp
  set the fileName of player "miplayer" to text of field "tema"
  start  player "miplayer"
end mouseUp
                    

Propiedades del texto

Desarrolla un sript en MetaCard que permita realizar un control de texto cuyo comportamiento fuese el de hacer disminuir, con el paso del tiempo, el tamaño del texto que se muestra en pantalla. Suponga que se conocen la longitud del texto, la variación que se producirá en el tamaño en cada paso, así como los tamaños inicial y final.

El primer paso es crear una pila nueva y ponerle un nombre adecuado. Después crearemos un campo de texto con field tool. Ajustar al tamaño deseado (hacerlo bastante grande para que se vea completamente lo que pone en el campo de texto con el tamaño máximo a utilizar) y renombrar con uno adecuado.

Crear un botón con button tool y haciendo doble click en él se mostrarán sus propiedades, en la pestaña de behavior pulsar el botón de script. El evento que ha producirse sobre el botón es

on mouseUp .... end mouseUp
, la propiedad ha modificar es textSize ( para más información Metatalk Reference).

También he utilizado para realizar un bucle la estructura de control repeat e ir asignando, a la propiedad antes comentada, un valor en cada iteración.

Finalmente como puedes comprobar hay que añadirle algo más para que de tiempo suficiente para visualizar esa disminución o aumento continuo pero poco a poco, yo he utilizado al final de cada iteración la orden wait, y me ha solucionado ese problema. A lo mejor se os ocurre algo diferente, si funciona es correcto.

Mirar el ejemplo y empezar a probar vosotros mismos, no os escribo el script para que lo intentéis y entendáis su funcionamiento sin tener que daroslo todos hecho.

Espero que funcione .... Suerte

Figura 1-23. Muestra de la tarjeta del paso correspondiente a las propiedades del texto y un ejemplo de su realización.

#
# Botón "Disminuir"
#
on mouseUp
  repeat with i = 34 down to 12
    set the textSize of field "texto" to i
    wait 1 second
  end repeat
  set the visible of me to false
  show button "aumentar"
end mouseUp

#
# Botón "Aumentar"
#
on mouseUp
  repeat with i = 12 to 34
    set the textSize of field "texto" to i
    wait 1 second
  end repeat
  hide me
  show button "disminuir"
end mouseUp
                    

Recorriendo la pila

Explíquese de forma resumida como se podría convertir un tutorial de MetaCard en un documento HTML (utilizando MetaCard).

El primer paso a realizar es crear una nueva pila, redimensionar y renombrar a vuestro gusto. En ella crearemos dos campos de texto con field tool, al primero le pondremos el nombre "Titulo", lo usaremos para el título de cada tarjeta. Al segundo le llamaremos "Instrucciones" y en él escribiremos una serie de comentarios a nuestro gusto.

Crearemos botones para movernos por las diferentes tarjetas que posee nuestra pila, además de otro botón que llamaremos de tutorial a HTML. Básicamente para este botón hay que realizar un recorrido sobre las tarjetas de la pila y pasando el htmlText de los campos de texto creados a un fichero.

La separación de las tarjetas vendrá definida en el HTML creado con "###".

Mirando la la sección de nombre Caso de estudio: una revisión de los tutoriales básicos en Capítulo 5 y con esta pequeña ayuda deberíais ser capaces de realizar este ejercicio con facilidad, pero además os adjunto el ejemplo del botón ver ejemplo para que os ayude a entenderlo correctamente.

Suerte

Figura 1-24. Enunciado y posible resultado del ejercicio sobre recorrido de una pila.

El código de este ejemplo ya lo hemos introducido al hablar de los botones que acompañan a las tarjetas, así que no lo haremos aquí de nuevo.

Buscar y localizar objetos

Durante la realización de un proyecto multimedia en Metacard se ha perdido un control u objeto de tipo "button", esto es, ya no es visible en la ventana de pila de pantalla.

  1. ¿Cómo se puede comprobar que existe tal objeto?

  2. En caso de no haya sido borrada, dar alguna explicación de la desaparición del control.

  3. Indicar alguna forma de recuperar el objeto "perdido"

  1. Se puede comprobar la existencia de dicho elemento, utilizando la herramienta "Control Browser", esta se encuentra en "Tools", "Control Browser" y en la parte superior elegir la pila sobre la que estaba colocado el elemento desaparecido.

  2. Puede ser que su posición actual no se encuentre dentro de la pila y por eso no se puede visualizar, parece que se ha pedido o eliminado.

  3. Haciendo uso de la "Message Box", se puede recuperar dicho objeto. Dicha herramienta la puedes utilizar presionando simultáneamente las teclas Crtl+m, o también pulsando en la barra de herramientas sobre Tools | Message Box.

    En el campo de texto de la "Message Box" escribiremos un script que permita a dicho objeto a una posición dentro de la pila, para ello utilizaremos la orden move, mirar Metatalk Reference para que os sirva de ayuda para realizar este script.

Figura 1-25. Texto y posible resultado del ejercicio sobre localización de objetos.

#
#Botón "Desaparecer"
#
on mouseUp
  move the field "texto"to 800,800
  move the button "boton"to 800,800
end mouseUp

#
# Botón "Volver"
#
on mouseUp
  move the field "texto" to 125,52
  move the button "boton" to 120,96
end mouseUp
                    

Contenido de una imagen asociado a un fichero

¿Como se podría incluir una imagen en una presentación multimedia desarrollada en MetaCard?.

Para introducir una imagen en una pila se tiene que crear un objeto de tipo image con la herramienta image tool de la "Menu Bar", al pulsar con esta herramienta se marcará la esquina superior izquierda, elegiremos el tamaño adecuado y volveremos a pulsar, si no ha quedado a tu gusto puedes modificarla con "select controls".

Haciendo doble click sobre la imagen con esa herramienta se abrirá el cuadro de propiedades y en el campo file Name escogeremos la imagen que queremos que sea mostrada en dicha aplicación multimedia.

A continuación les muestro un ejemplo de como quedaría ya finalizado, espero que la imagen sea de vuestro agrado[1] .

Figura 1-26. Texto del ejercicio sobre cómo incluir una imagen y un posible resultado.

No existe código especial asociado a este ejemplo, únicamente la demostración del flexible funcionamiento de una ruta a un fichero externo introducida en modo relativo: la del fichero imagen en este caso, que permite mover el ejemplo a otra localización o cambiar el fichero (reutilizando el nombre) y ver que sigue funcionando la aplicación

Paletas de herramientas en MetaCard

Para qué sirve:

  1. El "Control Browser".

  2. La "Message Box".

  1. El "Control Browser" sirve para poder ver todos los elementos que están colocados sobre una pila. Podemos cambiar para ver los elementos de otra pila mediante un "combobox" que está colocado en la parte superior del "Control Browser". Podemos visualizar los scripts de dichos elementos marcando el elemento deseado y pulsando el botón de Script. También podemos hacer que dichos elementos estén visibles u ocultarlos seleccionando el elemento y pulsando el botón de hide si está visible o show en caso de esté oculto.

    Está herramienta podemos hacer uso de ella pulsando sobre Tools | Control Browser de "Menu Bar". Para más información consulta el Metatalk Reference.

  2. La herramienta "Message Box" sirve para dar instrucciones a realizar, a modo de script pero sin tener que indicar evento alguno, sino a la terminación hay que pulsar la tecla de intro de vuestro teclado. En dicha herramienta podemos hacer uso de órdenes para realizar la función deseada. Solo podrán ser instrucciones de una sola linea. Esta herramienta podemos utilizarla, pulsando Tools|Message Box en "Menu Bar", o también pulsando Crtl+M.

Figura 1-27. Cuestión sobre la utilización de algunas de las paletas de herramientas contenidas en MetaCard y sus respuestas, tal como aparecen en el propio tutorial.

Tampoco exite código asociado en este caso, la idea es que se compruebe de forma expresa lo que se dice sobre el "Control Browser" y la "Message Box".

Mover y ocultar objetos

Indique:

  1. Indique qué objetos es posible mover por la pantalla y como se lleva a cabo.

  2. Se desea tener una imagen ampliada de un detalle de un plano presente en una aplicación multimedia. ¿Cual debe ser el código que permita a dos botones ("No ver detalle" y "Ver detalle") mostrar tal imagen al usuario u ocultarla?

  1. El primer paso como en la mayoría de los ejercicios es crear una pila, después crearemos los componentes que deseemos mover por la pantalla, un campo de texto con la herramienta "field tool", haciendo doble click sobre dicho campo texto se mostraran su cuadro de propiedades, en ella le pondremos un nombre adecuado en la pestaña de "appearance",pulsando "font" podemos elegir un tipo de letra,tamaño, etc...En "colors" podemos elegir un color apropiado, también lo podemos mostrar tipo etiqueta con "show as label".

    Marcaremos las etiquetas de "autohilite" y "lock text".

    Además del campo de texto podemos mover cualquier cosa, como un botón, una imagen incluso la pila misma mediante la orden move.

    Crearemos un botón para poner en funcionamiento el movimiento de un botón, de una imagen y de la pila.

    En dicho botón crearemos un script, el evento será la pulsación de ese botón, y la orden para mover los objetos el anteriormente comentado "move".

    Para mover el campo de texto utilizaremos un "path", es decir un recorrido, para esto crear un trazado con "poligon tool" que será dicho trazado.

    En el ejemplo para poner en funcionamiento este movimiento pulsaremos con "browse tool" sobre la pila.

    En la ayuda de MetaCard, en "Metacard Tutorials", "presentation tutorial" explica cómo hacer ese tipo de movimiento paso a paso, espero que lo comprendáis y que podáis realizar ese tipo de movimiento con facilidad.

  2. El primer paso es crear una pila nueva, ajustar al tamaño deseado y ponerle el nombre que vosotros queráis, después crear con "image tool" una imagen, darle doble clik y se mostrará el cuadro de propiedades de dicha imagen.

    Elegir la imagen deseado en el campo de texto con el nombre File name.

    Después crear dos botones y ponerles las etiquetas correspondientes, ver detalle y no ver detalle, y en dichos botones realizar los scripts necesarios para dichas funciones.

    El primero, ver detalle, se realiza con la función show, y no ver detalle la función hide, mirar su funcionamiento en Metatalk Reference.

    También se puede realizar con la orden "set" modificando la propiedad visible de la imagen.

Suerte

Figura 1-28. Muestra de las tarjetas que plantean los ejercicios al respecto de las operaciones de movimiento y ocultación de objetos en una pila de MetaCard.

El primer ejemplo de este paso mueve diferentes objetos con la orden move, para demostrar que se puede mover con igual dificultad un botón o la pila al completo:

#
# Botón "mover"
#
on mouseUp
  move button "mover" to 175,175
  wait 1 second
  move button "mover" to 100,100
  wait 1 second
  move stack "presentacion" to 200,200
  wait 1 second
  move stack "presentacion" to 185,334
end mouseUp
                    

El segundo ejemplo es análogo, en cuanto a que pide realizar un uso de una función show (y alternativamente hide) para mostrar u ocultar en este caso una imagen.

Reduciendo el número de instrucciones

Para llevar a cabo una animación suele ser necesario utilizar un alto número de instruciones. En muchos casos un alto número de instancias del mismo objeto o similares son utilzados para realizar una animación. Este ejemplo muestra como se puede reducir el número de instrucciones necesarias cuando la repetitividad del comportamiento es patente utilizando bucles para nombrar (recorrer) los diferentes elementos animar.

Repartidas por una tarjeta en una pila realizada con MetaCard, se dispone de veinticinco objetos (de tipo "image" y de nombre "gota1" a "gota25") visibles. Se plantea simular que son tragadas, una a una para simplificar, por un objeto (también de tipo "image" y de nombre "desague") al recibir un evento de pulsación de ratón sobre dicho objeto. Todo el código se debe realizar dentro del script del objeto "desague" y, al terminar el efecto, sólo debe quedar a la vista el "desague". Entonces sonará un fichero de audio importado, de nombre "burp.wav", con 22 KHz, ocho bits y sonido monofónico.

El primer paso para realizar este ejercicio es crear 26 imágenes con "image tool" y en ellas la propiedad "file name" apuntar a la imagen deseada, en 25 la de la gota, y en el restante la del desagüe.

Justo después crear un botón y un player. En este player la propiedad "file name" apuntar al fichero que nos dice el enunciado de este ejercicio. También ponerlo no visible.

En el botón realizaremos un script que consta de un bucle, yo he utilizado repeat, en este bucle utilizaremos las órdenes move para que se desplaze al lugar adecuado, hide para ocultarlas y start para que suene el player.

Para hallar las coordenadas de la imagen desagüe he utilizado la "Message Box", de esto ultimo ya no te doy tanta explicación, deberías saber hacerlo por ti mismo/a, al igual que el resto del ejercicio. Espero que te salga bien. Suerte

Figura 1-29. Ejercicio al respecto de la forma de nombrar objetos para facilitar la reducción de líneas de código necesarias para referenciarlos.

Veamos cómo es posible hacer uso de las propiedades del lenguaje para realizar un alto número de acciones repetidas sobre un número de objetos.

#
# Botón "Tragar"
#
local i
on mouseUp
  repeat with i = 25 down to 1
    move image i to 36,202
    set the filename of player "miplayer" to popupblock.wav
    start player "miplayer"
    move image i to 248,218
    hide image i
  end repeat
  send mouseUp to button colocar
end mouseUp

#
# Botón "colocar"
#
local i
on mouseUp
  repeat with i = 25 down to 1
    move image i to 22,17
    show image i
  end repeat
end mouseUp
                    

En realidad el enunciado pide que los objetos (las imágenes) se llamen "gota1" a "gota25". Dejo de parte del lector interesado modificar el código de Victor para que realmente haga uso de este esquema de nombre y el operador de concatenación &;

Un pequeño castillo de fuegos artificiales

La empresa de animación Sisney Multixar ha recibido el encargo de simular un castillo de fuegos de artificio. Para ello se plantea, sobre una pantalla en negro, simular la funcionalidad de una única carcasa (llamémosla carcasa), que al hacer click sobre cualquier punto de la tarjeta, se eleva desde un punto (varPosInicial) hasta otro determinado (varPosFinal) en un cierto tiempo (varTpo) expresado en segundos. En ese momento se produce la explosión visual del mismo, acompañada de un sonido guardado en un fichero externo a la pila, cuyo nombre está en varBoom. En ese punto de la pantalla se convierte en otro cohete (que se llamará carcasa1), que cae desde ese punto hasta uno (varPosFinalCarcasa1) en que se "apaga".

Explique cómo sería posible llevar a cabo esta idea con objetos que no sean de tipo image y su código asociado utilizando, como herramienta de autor, MetaCard. Ténganse en cuenta las limitaciones de código del MetaCard Starter Kit uitlizado en las prácticas, Utilice los nombres expuestos en el enunciado y un máximo de dos objetos en la pila.

El primer paso es crear una nueva tarjeta, al hacerlo se abrirá una ventana de diálogo en la que pondremos el nombre que corresponda a nuestra pila, también elegir un tamaño apropiado para la pila.

A continuación con image tool crearemos una imagen, le asignaremos el fichero donde se encuentra la imagen deseada a incluir en nuestro ejercicio en la opción File Name de las propiedades de la imagen; haced copias, tantas como imágenes quieras añadir como esa a la pila, y así sucesivamente con todas las imágenes distintas que quieras. Mi consejo es que primero penséis donde van a estar esas imágenes inicialmente, antes de visualizarse, y que las coloquéis allí.

Después crear un botón para que sitúe esas imágenes en la posición deseada de antes de empezar, como la versión de MetaCard que utilizamos sólo deja insertar diez instrucciones en el script de cada objeto, necesitaréis crear más botones que se mandan mensajes mouseUp al siguiente botón y así hasta poder colocar en ese sitio inicial cada imagen.

Para conseguir que esas imágenes se coloquen el sitio, una orden a poder utilizar es move y el parámetro without waiting para que se muevan a la vez, y las coordenadas deseadas. Otra opción puede ser utilizar la orden set y la propiedad loc también con las coordenadas deseadas.

Ahora después de haber realizado ese paso, pensad en la trayectoria a realizar por las imágenes: otra vez a crear botones con scripts, utilizando la orden move para describir la trayectoria deseada.

Otra opción para ambos casos es realizar los scripts directamente en los objetos a desplazar por la pila, y un solo botón para comenzar. Tenéis que jugar con las órdenes hide y show para que aparezcan y desaparezcan en los momentos deseados.

Añadir también un player con la herramienta player tool con el sonido de una explosión de petardo y colocar cuando se empieza a mover y cuando explota. Justo después unir los dos casos, para que cuando acabe la visualización se vuelvan a colocar como al principio, ya que ni no se colocan no volverán a describir las trayectorias deseadas.

Figura 1-30. Planteamiento y un instante de la ejecución del ejercicio de construcción de una aproximación a un castillo de fuegos artificiales hecho en MetaCard.

Este ejemplo, complica la cosas al programador si no se aplican los conceptos anteriores, así se puede pensar en una implementación secuencial como la siguente, que empieza lanzando imágenes de pequeñas esferas de color que simulan los componentes de la primera "carcasa" de este ejercicio de tono "festivo":

#
# Botón "empezar"
#
on mouseUp
  send mouseUp to button azules
end mouseUp

#
# Botón "azules"
#
on mouseUp
  show image azul
  move image azul to 133,29
  start player "miplayer"
  hide image azul
  show image a1
  show image a2
  show image a3
  move image a1 to 90,224 without waiting
  send mouseUp to button a_2
end mouseUp

#
# Boton "a_2"
#
on mouseUp
  move image a2 to 75,224 without waiting
  move image a3 to 56,224 without waiting
  show image a4
  show image a5
  show image a6
  show image a7
  move image a4 to 112,224 without waiting
  move image a5 to 114,224 without waiting
  send mouseUp to button a_3
end mouseUp

#
# Botón "a_3"
#
on mouseUp
  move image a6 to 152,224 without waiting
  move image a7 to 152,224 without waiting
  show image a8
  show image a9
  show image a10
  move image a8 to 180,224 without waiting
  move image a9 to 200,224 without waiting
  move image a10 to 225,224
  send mouseUp to button a_4
end mouseUp

#
# Botón "a_5"
#
on mouseUp
  hide image a9
  hide image a10
  show image rojo
  move image rojo to 133,29
  start player "miplayer"
  hide image rojo
  show image r1
  show image r2
  send mouseUp to button rojos
end mouseUp
                    

Y así sigue en lanzando un cohete rojo, otro verde, amarillo y negro para finalizar que ha dispuesto Victor. Permítame el lector que no copie más del código y acepte mi invitación a desarrollar su propia implementación un poco más elaborada.

Cuestionario

Para finalizar, esta es la propuesta de un cuestionario que realiza Víctor. La tarea de esta aplicación es permitir a un alumno contestar a una serie de preguntas y enviar el resultado por correo[2] para su evaluación:

Figura 1-31. Ejemplo de apariencia de las tarjetas del cuestionario.

Para recoger las respuestas al cuestionario ...

#
#
#
on mouseUp
  ask file "Tria el fitxer on guardar el contingut del tutorial ..." with "respuestas.html"
  if  it is not "Cancel" and it is not empty
  then
    put  empty into url ("file:" & it)
    repeat with i = 1 to the number of cards of this stack
      put the htmlText of field "respuesta" of card i & return after url ("file:" & it)
    end repeat
  end if
end mouseUp

#
#
#
on mouseUp
  ask file "Tria el fitxer on guardar el contingut del tutorial ..." with "respuestas.txt"
  if  it is not "Cancel" and it is not empty
  then
    put  empty into url ("file:" & it)
    repeat with i = 1 to the number of cards of this stack
      put the Text of field "respuesta" of card i & return after url ("file:" & it)
    end repeat
  end if
end mouseUp
                    

Conclusión

Esta es una de las realizaciones que los alumnos han ido creando y que se incluyen en este texto para que el lector pueda encontrar un trozo del discurso en que las palabras utilizadas, la forma de emplear los controles y el código sea más cercana, posiblemente, al esquema mental que se está formando en su mente.

Admito que el código es mejorable, pero sobre todo lo es la interfaz. En cualquier caso no nos critique demasiado, amigo lector, la intención es ofrecer una solución más dinámica a los problemas que aparecieron en exámenes y que sean accesibles de una forma práctica.

Hay algunas cosas que se nos han quedado por el camino:

Notas

[1]

[Nota del autor] En caso de no ser así, que todo puede ser, escoje otra que tengas a mano.

[2]

[Nota del autor] La dirección de correo indicada es invención de Victor, así que no podemos esperar que exista en este momento. De hecho, en la realización final debería ser la que se designe para recoger los resultados del cuestionario. Seguramente la mía, como no.