MetaCard y Revolution: Herramientas de autor multiplataforma para multimedia | ||
---|---|---|
Anterior | Capítulo 4. Objetos y controles básicos | Siguiente |
En este texto utilizamos indistintamente el término pila y aplicación puesto que es el gran contenedor. Cada ventana que aparece en pantalla es una pila, desde el punto de vista de MetaCard o de Revolution. Algunas pueden estar subordinadas a otras y por ello distinguimos entre pilas y subpilas. Ha podido observar las cuestiones básicas en la la sección de nombre MetaClasses en Capítulo 1 relativas a este tipo de objeto, ahora haremos un breve repaso y lo acompañaremos con código que puede escribir y ejecutar desde la "Message Box".
Lás órdenes básicas para abrir una pila ya las hemos visto en el primer tutorial, allá por la la sección de nombre Tutorial sobre aplicaciones en Capítulo 1 del Capítulo 1 (go/topLevel/modeless). ¿Reconoce la siguiente pila?
topLevel "MC stack Properties Menu"
Sólo nos queda por mencionar open y palette y para cerrar una pila ..., correcto: close stack. Aunque también existen otras posibilidades como quit. La ayuda, como siempre, le asite a la hora de recordarlas y le explica las diferencias.
Entre las características más estéticas de una pila hay que mencionar decorations y backdrop.
Importante: En la lista de correos de MetaCard se ha evidenciado el comportamiento inestable de esta propiedad en manejadores de ventanas como KDE o GNOME, así que le recomiendo que salve su aplicación antes de hacer uso de ella si, como yo, es usuario habitual de uno de estos entornos y no quiere hacer uso de otros como BlackBox o wm.
Primero que nada, recordemos que es un objeto más de los que podemos utilizar. Es el contenedor de todos los demás, así que las acciones sobre este repercutirán en todos los demás. ¿Qué cosas se pueden hacer con una pila? Lo que se le ocurra, hagámoslo simplemente desde la "Message Box":
Averiguar y cambiar las propiedades usuales: color, geometría, texto, nombre, ...:
put the width of stack "Home" set the width of stack "Home" to 500 set the width of stack "Home" to 344 set the left of stack "Home" to 344 set the left of stack "Home" to (the left of stack "Home" + 100)
Ocultarla o mostrarla, cerrarla, ....
hide stack "Home" go stack "Home" close stack "Home"
El lector recordará que se ha utilizado ya la orden go para transitar entre las tarjetas de una pila. En este caso, la estamos empleando para abrir una pila; pero tiene muchas más opciones. Es recomendable echar un vistazo a la ayuda en línea para ver como se puede abrir una pila sin mostarla en pantalla, o como ir a una tarjeta determinada de otra pila, etc .
Y, claro, moverla por la pantalla con un sencillo move
move stack "Home" to "10,10"
Pero, cabe recordar que este como cualquier otro objeto, puede responder a los eventos del sistema o los que defina el programador y así es posible mover una pila o redimensionarla como se hace con cualquier otro objeto de los vistos hasta ahora. Recuerde también que, como con cualquier otro objeto que haya movido (en el segundo tutorial de MetaCard lo habrá hecho con un campo de texto), es el centro del objeto el que se situa en esas coordenadas de la pantalla. Así que lleve cuidado: ¡puede sacarla de la pantalla! Pero, tranquilo, siempre puede recuperarla con el mismo esfuerzo.
Pongámoslo todo junto y vamos a crea un "tutorial" sobrel el manejo y la actuación con una pila. El esquema general es un botón que desencadena la acción oportuna y su código que es mostrado en un campo de texto. Cada tarjeta contiene esta pareja y es un único caso de aplicación. Para que aparezca el código en el campo de texto cada vez que cambiamos de tarjeta, todas las tarjetas (asumiendo los nombre de "accio" para el botón y "scriptAccio" para el campo de texto) tienen este código:
# Cualquier tarjeta on openCard put the script of button "accio" into fld "scriptAccio" end openCard
Cada tarjeta es un caso de aplicación y le propongo estos:
Centrar la pila o moverla al centro de la pantalla. Esto puede ser de interés cuando se desea llamar la atención sobre lo que estamos haciendo o cuando se hace una presentación ...
#button "accio", etiqueta "Centrar la pila en la pantalla" on mouseUp set the location of this stack to the screenLoc end mouseUp
Alternativamente poner y quitar el tapiz de fondo de la aplicación en MetaCard esto es, un fondo que cubre a todas las demás aplicaciones se están ejecutando en un momento dado.
#button "accio", etiqueta "Canviar el fondo de la pantalla" on mouseUp if (the backdrop = "none") then set the backdrop to black else set the backdrop to none end mouseUp
Mover la pila por pantalla a una posición aleatoria dento de los márgenes del escritorio, aprovechando para mostrar información del sistema.
#button "accio", etiqueta "Menejar-la per la pantalla" on mouseUp move this stack to\ random(the third item of the screenRect), \ random(the fourth item of the screenRect) put "Sistema:" && the platform &return &\ "(Sistema de finestres)" && the screenVendor & return &\ "(Nom de la pantalla)" && the screenName & return &\ "(Profunditat)" && the screenDepth & return &\ "(Paleta de colors)" && the screenType end mouseUp
Modificar, aleatóriamente, las dimensiones de la ventana.
#button "accio", etiqueta "Redimensionar-la" global ampleActual, altActual on mouseUp # put "Tamany de la pantalla" && the screenRect &&\ # "tamany de la pila" && the width of this stack &\ # "x" &\ # the height of this stack if (the width of this stack = ampleActual) then set the width of this stack to random( ampleActual + 100) set the height of this stack to random( altActual + 100) else set the width of this stack to ampleActual set the height of this stack to altActual end if end mouseUp #Esta cuarta tajeta global ampleActual, altActual on openCard put the script of button "accio" into fld "scriptAccio" put the width of this stack into ampleActual put the width of this stack into altActual end openCard on resizeStack ### Para que no aparezca este mensaje en todas las demás tarjetas put "Tamany de la pantalla" && the screenRect &&\ "tamany de la pila" && the width of this stack &\ "x" &\ the height of this stack end resizeStack
Averiguar las pilas abiertas para aplicar sobre una de ellas una cierta acción. ¿Esto no le suena? Por que si ya está hecho lo podemos aprovechar. El "Control Browser", cierto, allí hay un botón que le deja escoger la pila ... Ya está, lo copiamos y lo pegamos en la pila que estamos creado.
Si lo ha hecho, desde le "Control Browser" puede editar el propio "Control Browser" verá que si lo incluye en su pila se queja de un tal "refresh", que parece ser un manejador que no encuentra según el texto del mensaje de error. Encontrará este manejador en el código de la tarjeta del "Control Browser" ¿Que no sabe cómo obtenerlo? Pues, por ejemplo, desde la "Message Box":
#button "accio", etiqueta "Redimensionar-la" edit the script of the first card of stack "Control Browser"
¿Bonito, eh? Sí, ciertamente, pero un poco largo para nuestro Starter Kit. Veamos ..., creo recordar que estaba en algún otro lugar ... Ah, sí el "Navigator" (Tools|Navigator). Abrimos esta pila y la examinamos desde el "Control Browser": existe un botón "Stack Name" que tiene ¡cero líneas de código!
¿Dónde está el código? ¿En la tarjeta¿ La abrimos desde la "Message Box"
#button "accio", etiqueta "Redimensionar-la" edit the script of card 1 of stack "Navigator"
Allí dice cómo asignar al botón la última pila activa:
#button "accio", etiqueta "Redimensionar-la" on preOpenCard set the label of button "Stack Name" to the short name of the topstack end preOpenCard
¿La pila? Venga, editémosla:
#button "accio", etiqueta "Redimensionar-la" edit the script of stack "Navigator"
Si lo hace comprobará que ¡está vacía! Si copia y pega este botón (Stack Name) en su pila comprobará que funciona: abrimos alguna pila, lo pulsamos y lo muestra; cerramos algunas, lo pulsamos y lo muestra. Además recoge la pulsada y la deja visible cuando no está desplegado. ¿Dónde ha ido a parar el código? No, no es magia, vuelva la "Control Browser" y abra las propiedades del botón, en la ventana " Button Properties" escoja la pestaña Accelerators y observe el apartado Menu Name. Este botón (uno de los de tipo "desplegable") ¡tiene asociada una pila! Esa pila se encarga de mantener la lista de pilas abiertas y Vd. la puede utilizar sin más. ¿No me cree? A la "Message Box" y ejecute:
#button "accio", etiqueta "Redimensionar-la" open "MC Stack Menu"
¿A que sí? ¡Impresionante! Bueno, pues ya hemos visto una cosa más: podemos crear nuestras pilas que se despliegan bajo un botón y que nos permiten realizar menús flotantes desplegables. ¿Está pensando también en hacer botones con iconos para que los mensajes no sólo sean textuales? Buena idea, adelante, adelante. No me espere.
Yo acabo comentado que existen, generalemente, muchas formas de resolver un problema. Yo quería enseñale una cosa y me ido por una solución, pero no es la única. Cree un botó de tipo "Option" y asígnele este código:
#button "accio", etiqueta "Redimensionar-la" on mouseDown put the openStacks into me end mouseDown on mouseUp put the label of me end mouseUp
No se enfade, si se ha dejado llevar hasta aquí y ahora se siente "mareado": le prometí que le enseñaría la herramienta por dentro. Sea crítico, no acepte nada sin olvidar que es sólo una posibilidad entre otras muchas. En cualquier caso, permítame la licencia, ha sido una cuestión puramente ilustrativa: nada personal, se lo aseguro.