Capítulo 11. Una presentación movida

Se quiere animar la presentación de una aplicación sobre los diez personajes que integran un conjunto de actividades para niños en primaria. Para ello se ha pensado hacer que la pantalla inicial de la aplicación muestre los nombres de los mismos de una forma animada. El diseñador propone que se realice a modo de "plataformas": contenedores de texto que suben hasta unas posiciones predeterminadas.

Teniendo en cuenta las características de la herramienta de autor MetaCard: indique dónde se habrá de situar e implemente el código necesario para elevar esas "plataformas" en cuanto se abra la aplicación.

Suponga que los elementos estarán ya dispuestos en sus posiciones iniciales correspondientes y que existe un gráfico oculto "posicioPuntsDesti" para designar dónde va a ir cada uno de los nombres.

#En la pila o la tarjeta
on openCard
  send "mouseUp" to button "ara"
end openCard


# En el botón "ara"
local posicionsFinals

on mouseUp 
   put the points of graphic "posicioPuntsDesti" into posicionsFinals

   repeat with i = 1 to the number of lines of posicionsFinals
    move fld i to line i of posicionsFinals
  end repeat  
end mouseUp
                       

Nota: He optado por no mostrar en ningún momento el gráfico que, oculto, facilita la dirección de los movimientos de los elementos para que Vd. mismo lo situe a su libre albedrío. Si no recuerda cómo se hacía habrá de repasar lo expuesto en el la sección de nombre Tutorial sobre presentaciones en Capítulo 1.

Figura 11-1. Capturas de la aplicación realizada donde se muestra la situación inicial y final del contenido de la ventana.

Sugerencia: Si se fija en las capturas de la Figura 11-1, se habrá dado cuenta que el nombre (campo de texto) que aparece en penúltimo lugar al inicio, acaba en el lugar más a la derecha en la siguiente imagen. Si no lo hecho en su implementación le sugiero dos caminos:

  • O bien el gráfico tiene ese trazo peculiar

  • O bien los números que tienen asignados cada uno (propiedad Number, accesible desde la pestaña Name de las propiedades de un campo de texto) hacen que se mueva primero uno que, en su posición inicial está dando a entender que es posterior. Puede hacer esto mismo creándolos en ese orden y cambiando, manualmente con el ratón, su posición incial.

Nota: Observe que la solución como se ha implementado permite extender, de forma fácil, la misma a un número mayor de elementos, puesto que se ha utilizado siempre como referencia el número de campos de textos existentes en la pila, sea cual sea este.

Al caso anterior se le pueden introducir algunas mejoras y algunas ayudas para su desarrollo. En este sentido lo propongo que añada una funcionalidad estética y una práctica. La primera consiste en, a partir de la lectura de la ayuda de la orden move, hacer que los diferentes movimientos se lleven a cabo simultáneamente utilizando el parámetro without waiting. La segunda es debida a que durante el proceso de creación (en la etapa de desarrollo) hay que repetir el proceso desde el punto inicial, bien por que este se atasca en algún punto como por que se quieren introducir modificaciones, para ello se creará un botón que se ocultará y que dejará el sistema en una situación conocida.

Figura 11-2. Capturas de la aplicación realizada donde se muestra la situación inicial y final del contenido de la ventana.

#Botón: ara
local posicionsFinals

on mouseUp 
   set cursor to busy
   put the points of graphic "posicioPuntsDesti" into posicionsFinals

  #  Hacer parpadear el gráfico para recordar que está por ahí
  repeat with i = 1 to the number of flds
    set the visible of graphic "posicions" to ((i mod 2) = 0)
  end repeat
  hide graphic "posicions"
  
  put the points of graphic "posicions" into posicionsFinals
  repeat with i = 1 to the number of lines of posicionsFinals
    move fld i to line i of posicionsFinals in 3 seconds without waiting
  end repeat
  
  wait 3 seconds
  send "mouseUp" to button "reinicia"  
end mouseUp


# Botón: reiniciar
on mouseUp
  put "63,356" & return &\
  "163,356" & return &\
  "264,356" & return &\
  "480,356" & return &\
  "368,356" & return \
  into posicionsReals
  
  repeat with i = 1 to the number of flds
    set the loc of fld i to line i of posicionsReals
  end repeat
end mouseUp
                       

Conclusiones

Al terminar este ejemplo ...