Ejercicios y actividades

En esta sección el lector ha podido:

Repasemos los conceptos expuestos en este capítulo con un par de actividades que recorran los contenidos de una aplicación que desarollamos:

  1. Se propone realizar una aproximación que permita realizar un recorrido por los elementos que integran una tarjeta, de manera que sea posible realizar en cada uno de ellos una determinada labor.

    De momento nos vamos a limitar a ir guardando en un campo de texto el código (script) correspondiente a cada uno de los objetos para poderlos examinar después. Un sólo botón dará pie a la secuencia necesaria

    Figura 4-36. Planteamiento básico del ejercicio de recorrido de una pila.

    La captura de la Figura 4-36 sólo muestra el botón inicial y el campo de texto donde aparecerá el resultado final. Restringiremos a la propia pila que construimos el efecto de la misma y dejaré que sea el lector quien proponga una generalización a cualquier pila abierta.

    El botón inicial que lanza todo el proceso tiene asignado el código

         #
         # script boton "recorrer"
         #
         # Variables accesibles desde los distintos scripts 
         global nompila
    
         on mouseUp 
          put "vcodic" into nomPila
    
          # indicando que se hace algo 
          set the cursor to watch
          set the defaultStack to nompila 
          put empty into field "elCodic" 
          call "continuar" of button boton4 of this stack
         end mouseUp 
                

    A partir de aquí, cada tipo de objeto presente en la pila se ha de listar y extraer su código asociado. Estos códigos que se muestran a continuación se ocultarán al finalizar el desarollo: el primero gobierna la secuencia y cada uno de los siguientes hace lo propio con un tipo de objeto. Este botón obtiene el nombre completo de la tarjeta (c_name) y el corto de la misma (sc_name), así practicamos con la diferencia de cada una de estas opciones. Esta información la van a aprovechar otros controles para recordar a quien pertenecen los controles: a qué tarjeta están asociados.

         #
         # script boton 4. Iniciar el volcado
         #
         global c_name, sc_name 
         on continuar 
          put the name of this card into c_name 
          put the short name of this card into sc_name 
          call "continuar" of the button boton5 
          call "continuar" of the button boton6 
          call "continuar" of the button boton7 
          call "continuar" of the button boton8 
          call "continuar" of the button boton9 
         end continuar 
                

    Cada uno de los botones siguientes enmarca el código del objeto que examina en un mensaje para que sea cómodo después seguir la relación que existe entre ellos sólo leyendo el contenido del campo de texto. En el caso de la tarjeta, ya tenemos la información de cómo se llama "heredada" o compartida en las variables globales. Así que sólo queda obtener el código (script) de la misma.

         #
         # script boton 5. Tarjetas (cards)
         #
         global c_name, sc_name 
         on continuar 
          put ("CARD: " & c_name & return) & return after field "elCodic" 
          put ("SCRIPT PPAL: " & sc_name & return) & return after field "elCodic" 
          put (the script of this card) & return after field "elCodic" 
          put ("FIN SCRIPT PPAL" & return & return) & return after field "elCodic" 
         end continuar 
                

    Ahora nos dedicamos a un tipo de objeto en concreto en cada botón. Todos relizan la misma secuencia, con los mensajes propios de cada tipo de objeto. Como puede haber más de uno, a diferencia del anterior caso con la tarjeta ahora tendremos que realizar un bucle para recorrerlos y aplicar lo anterior.

         #
         # script boton 6. Botones
         #
         global c_name, sc_name 
         on continuar 
          put ("TIPO DE CONTROL: BOTONES" & return) & return after field "elCodic" 
          repeat with b = 1 to the number of buttons of card c_name 
           put the long name of button b into o_name 
           put ("OBJETO: " & o_name & return) & return after field "elCodic" 
           put (the script of button b) & return after field "elCodic" 
           put ("FIN OBJETO" & return & return) & return after field "elCodic" 
          end repeat 
         end continuar 
    
         #
         # script boton 7. Imagenes
         #     
         global c_name, sc_name 
         on continuar 
          put ("TIPO DE CONTROL: IMAGENES" & return) & return after field "elCodic" 
          repeat with im = 1 to the number of images of card c_name 
           put the long name of image im into o_name 
           put ("OBJETO: " & o_name & return) & return after field "elCodic" 
           put (the script of image im) & return after field "elCodic" 
           put ("FIN OBJETO" & return & return) & return after field "elCodic" 
          end repeat 
         end continuar 
    
         #
         # script boton 8. Campos de Texto 
         #
         global c_name, sc_name 
         on continuar 
          put ("TIPO DE CONTROL: CAMPOS DE TEXTO" & return) & return after field "elCodic" 
          repeat with f = 1 to the number of fields of card c_name 
           put the long name of field f into o_name 
           put ("OBJETO: " & o_name & return) & return after field "elCodic" 
           put (the script of field f) & return after field "elCodic" 
           put ("FIN OBJETO" & return & return) & return after field "elCodic" 
          end repeat 
         end continuar 
    
         #
         # script boton 9. Scrollbars
         #
         global c_name, sc_name 
         on continuar 
          put ("TIPO DE CONTROL: SCROLLBARS" & return) & return after field "elCodic" 
          repeat with s = 1 to the number of scrollbars of card c_name 
           put the long name of scrollbar s into o_name 
           put ("OBJETO: " & o_name & return) & return after field "elCodic" 
           put (the script of scrollbar s) & return after field "elCodic" 
           put ("FIN OBJETO" & return & return) & return after field "elCodic" 
          end repeat 
         end continuar
                

    Ya está hecho, ha sido un poco largo, pero seguro que ha podido aprovechar que hay mucho código repetido para realizar a partir de copias del primero los siguientes.

Pongamos a prueba su aprendizaje y su imaginación con las siguientes propuestas:

  1. A partir del ejemplo del "creador de acrónimos" de la la sección de nombre Campos de texto (field) , el lector debe proponer la implementación de una aplicación de cifrado o encriptación basada en la alteración sistemática de determinados caracteres.

  2. Crear una pila inicial, a modo de la agenda del primer tutorial, que sea una introducción a un historial de pacientes. En este contexto la amplicación necesaria es la asignación de una serie de documentos de características multimedia que reflejen el historial del paciente. Empezecemos con algo sencillo: añadir a esa pila principal la capacidad de mostrar las radiografías de los "pacientes", para lo cual se empleará una pila por cada paciente, de modo que sean dependientes (subpilas) de la original. En este momento sólo nos preocupa la implementación de la opción de crear (o dar de alta) un nuevo registro.

  3. Añadir a la anterior la acción de borrado, que deberá contemplar la eliminación del registro completo del paciente: sus datos y fotografías (radiografías). Todo ello sin alterar el mecanismo de asignación entre registro y pila de radiografías.

  4. Comprobar y corregir el mecanismo de avance o posicionamiento entre los registros disponibles.

  5. Demos un paso más, vamos a plantear cómo se puede realizar un recorrido por todos los componentes de una aplicación (una pila que puede contener subpilas) realizada en MetaCard (o en Revolution). El código anterior es ampliable y eso es lo que vamos a construir ahora. Los "..." son para que incluya allí el código que considere oportuno, sólo unas observaciones:

    • El recorrido puede generalizarse para cualquier tipo de objeto (control en la terminología de MetaCard) con una estructura como:

          repeat with i = 1 to (the number of controls in card j of the stack nomPila)
          ...
          put the name of control i of ... into elObjecte
          put the script of control i of ... into elCodic
          put "OBJECTE: " & elObjecte & return & elCodic & return after field "elCodic"
        end repeat
                       

      O, por supuesto, la que crea conveniente para el caso.

    • El recorrido debería extenderse a todas las tarjetas de una pila[1].

        repeat with j = 1 to (the number of cards in stack nomPila)
          ...
        end repeat
                       
    • Como que una pila puede estar compuesta de subpilas, este recorrido también debería estar contemplado en el caso más general.

        put the substacks of the stack nomPila into llistaSubPiles
        repeat with k = 1 to (the number of lines in llistaSubPiles)
         ...
        end repeat
                       
    • Tenga cuidado de no hacer cambiar de tarjeta activa en la pila que está examinando para no generar algún evento sobre la misma, así como también referenciar de manera correcta los objetos en la pila a examinar y no en la actual que es el caso por defecto del anterior ejemplo.

    • Sería interesante disponer de una opción para parar todo este proceso, para lo que puede aprovechar el paso de mensajes que se habrá visto obligado a utilizar si, como yo ahora, está utilizando el Starter Kit. Para ello puede comprobar el valor de una variable global o cancelar los eventos que vaya generando. Como recomendación, incluya un pequeño retraso que de opción a que el usuario pueda utilizar el botón de "parada" y que el sistema pueda responder.

        send ... to button ...  in 200 milliseconds
                       

    Empiece con la primera y poco a poco vaya avanzando, sin miedo.

  6. En la Figura 4-15, de la la sección de nombre Primitivas de dibujo: gráficos vectoriales (graphic) se ha planteado una primera tarjeta de incio de una aplicación. El usuario puede tener prisa y querer saltarse esta introducción. Sea amable y educado e incorpore un mecanismo que lo haga posible. Recuerde que ha de avisar de que esto es posible en la propia tarjeta y hágalo en sus aplicaciones futuras.

Notas

[1]

Este cometido ya se había comentado al hablar de los tutoriales básicos de MetaCard