MetaCard y Revolution: Herramientas de autor multiplataforma para multimedia | ||
---|---|---|
Anterior | Capítulo 4. Objetos y controles básicos | Siguiente |
Son los contenedores que se han de emplear en MetaCard para mostrar en pantalla contenidos textuales (ASCII) de una forma directa. En la mayor parte de los casos se utilizarán para recoger información del usuario y para permitir a este editarla. También es frecuente utilizarlos, a modo estático, para proporcionar información al usuario, para este caso en las propiedades de estos controles existe la opción "Show as Label" que elimina todas las propiedades de decoración y posible manipulación del texto que albergan. Junto a estas opciones la posibilidad de seleccionar su contenido en forma de lista con selecciones únicas o de múltiples líneas son las más utilizadas y como ejemplo de esta variedad se puede observar la Figura 4-7 .
Una de las características más interesantes de estos controles es su característica de dar formato (color, tamaño, fuente de letra, ...) al texto que contienen. Esto se realiza de una forma equivalente a los códigos HTML y cada día más próxima a su total equivalencia.
Si ha realizado ya los tutoriales básicos, puede encontrar ejemplos de estos códigos en los mimos y, por supuesto, en la ayuda en línea de MetaCard. Compruébelo: diríjase a cualquiera de las tarjetas y observe la similitud y la diferencia entre ejecutar en la "Menu Bar" cada una de las líneas siguientes:
put field "Instructions" put the text of field "Instructions" put the htmlText of field "Instructions"
En la la sección de nombre Caso de estudio: una revisión de los tutoriales básicos en Capítulo 5 se utilizará esta facilidad para llevar a un fichero el contenido de los tutoriales mencionados.
Se puede controlar el punto de inserción del texto que resulta de ejecutar la orden put sobre un contenedor (una variable, un control de tipo texto o un recurso accesible mediante una url) con los modificadores into, after y before como muestra los siguientes ejemplos que pueden ser ejecutados en la "Menu Bar" tecleando cada una de las líneas siguientes por separado:
put "Algo" into varAux; put empty into varAux; put varAux put "Algo" into varAux; put " més" after varAux; put varAux put "Algo" into varAux; put "Di: " after varAux; put varAux
En general, en cualquier contenedor de texto es posible realizar tareas sobre una selección del mismo. MetaCard dispone de funciones que permiten el trabajo con piezas (chunks en la nomenclatura anglosajona) de una granularidad dada. En concreto es posible hablar de:
character para indicar el más bajo de estos niveles y que involucra a, como parece obvio, uno sólo de los caracteres.
word se utiliza para indicar el siguiente nivel y permite seleccionar las "palabras" de un texto, esto es, lo que está delimitado por espacios en blanco.
line que permite la selección a más alto nivel de estas tres, por "lineas de texto". En este caso el delimitador es el separador de líneas o salto de línea (return
).
item se utiliza para indicar otro tipo de separador diferente del espacio en blanco o del salto de líneal y permite seleccionar las "entidades" de un texto que están separadas por el caracter deseado y que se ha de indicar utilizando itemDelimiter si no es el valor por defecto (el caracter ",").
Sobre estas funciones es posible:
Obtener el número de cada uno de ellos
put the number of characters of "1234567890" put the number of words of "Hola, Mon! Un, dos, tres, provant. Tot està com deu estar?" put the number of items of "Hola, Mon! Un, dos, tres, provant. Tot està com deu estar?"
Indicar el cardinal del que se quiere consultar o modificar a cualquiera de los niveles que es posible señalar:
put the character 1 of "Hola, Mon! Un, dos, tres, provant. Tot està com deu estar?" put the word 1 of "Hola, Mon! Un, dos, tres, provant. Tot està com deu estar?" put the item 1 of "Hola, Mon! Un, dos, tres, provant. Tot està com deu estar?"
Utilizar ordinales en su lugar:
put the first character of "Hola, Mon! Un, dos, tres, provant. Tot està com deu estar?" put the second word of "Hola, Mon! Un, dos, tres, provant. Tot està com deu estar?" put the third item of "Hola, Mon! Un, dos, tres, provant. Tot està com deu estar?"
Sugerencia: Existe un operador de los curiosos: any, que tendrá que descubir Vd. mismo qué hace. Sustituya uno de los ordinales de las tres sentencias anteriores y ejecute la misma orden varias veces.
Indicar rangos de elementos seleccionados:
put the character 1 to 13 of "Hola, Mon! Un, dos, tres, provant. Tot està com deu estar?" put the word 1 to 3 of "Hola, Mon! Un, dos, tres, provant. Tot està com deu estar?" put the item 1 to 4 of "Hola, Mon! Un, dos, tres, provant. Tot està com deu estar?"
Sugerencia: Compruebe qué sucede si utiliza números negativos. Por ejemplo con:
put the character 1 to -2 of "1234567890"
Hagamos un descanso: le propongo que realice el "creador de acrónimos". Esta compleja aplicación debe permitir introducir un texto y, al pulsar el botón "ACRONIMO", mostrará el correspondiente idem selecciónando las inciales de cada palabra. Para empezar puede pensar en un sencillo interfaz como el que muestra la Figura 4-8.
Cuyo código, el del botón, en su forma mínima es de la forma
on mouseUp put empty into field "resultat" repeat for each word paraula in field "frase" put the first char of paraula after field "resultat" end repeat end mouseUp
A partir de este ejemplo, el lector puede proponerse la creación de una aplicación de cifrado o encriptación basada en la alteración sistemáticas de determinados caracteres.
Para probar el manejo de las líneas puede introducir los retornos de carro con ayuda de los operadores de texto, por ejemplo con:
put "Hola, Mon!" & return & "Un, dos, tres, provant." & return & "Tot està com deu estar?"
De esta forma habrá visto que se muestra el texto en tres líneas diferentes. El operador & concatena las cadenas de texto y esto lo convierte en uno de los más utilizados, pero hay otros que, sin duda, encontrará sorprendentes, resumidos en el siguiente párrafo. Una pequeña recomendación, experimente y pruebe con:&&, is, among, is among y contains.
Encontrará en la entrada "operators" del Help | Index de la barra de herramientas una enumeración de todos los que pueden encontrar:
Lógicos, cuya evaluación devuelve un valor lógico de cierto (true) o falso (false). Como son los que pueden dar paso a expresiones, tales como los () el not, and y or; o los que permiten comparar números y cadenas de texto como el <, <=, >, >=, = y ><.
Aritméticos. Ejemplo de estos son para valores númericos el +, -, *, /, div, mod, ^.
De manejo de bits, que operan sobre la representación en binario de valores numéricos y sólo se pueden aplicar a estos. Se dispone de bitNot, bitAnd, bitOr, bitXor,
Y, de nuevo, "soprendentes"; como es el caso de:
is within # point is in a rectangle is not within # point is not in a rectangle is a(n) # type check is not a(n) # type check
La orden is es de las más utilizadas, por su tendencia a regularizar el código como frases de lenguaje natural (si el suyo es el inglés mucho más) y por sus posibilidades. Básicamente, se utiliza para comparar números o cadenas de texto como tales, pero también se puede utilizar para:
Averiguar si un elemento aparece como una entidad (chunk) de las que maneja MetaCard (word, item, o line) en un contenedor. Lo que lo relaciona con otras órdenes como contains, o las funciones itemOffset, lineOffset y wordOffset al establecer el modificador de búsqueda wholeMatches. Su utilización, tomada de la mencionada explicación de MetaCard es de la forma:
put "3" is among the items of "22,33,44" #returns false put "3" is among the words of "2 3 4" #returns true
Sugerencia: Estas opciones permiten pasar a manejar operaciones, en principio complejas como el mantenimiento de una parte de un menú que recuerde los ficheros reciente abiertos por una aplicación. Incluyo el código para que el lector le construya una sencilla interfaz y la incorpore allí. Puede recurrir a la MetaClase de la la sección de nombre MetaClasses en Capítulo 1 y ver cómo se utiliza la entrada Tools | Menu Builder para la realización asistida de estos controles y que veremos más adelante en la la sección de nombre Construcción de un menú en Capítulo 5.
if which is among the lines of fld "ultimsAccessos" then delete line lineOffset( which, fld "ultimsAcessos" ) of fld "ultimsAcessos"
Como validador de tipos (date, number, integer, point, rect y boolean), como en
if field "size" is a number then add 10 to field "size"
Para averiguar la existencia de objectos en la pila o recursos externos, como por ejemplo ficheros, en su forma there is.
Para terminar este apartado se realizará un pequeño ejemplo que muestra cómo se puede utilizar un campo de texto como una lista. Esto es, donde se realza la línea seleccionada y cómo se puede asociar un comportamiento a ese objeto para que reaccione cuando se cambia la selección. En la Figura 4-9 se ha dispuesto un campo de texto (fld "fitxersNecessaris") a la derecha de la pila para ello, también se puede ver el control de la izquierda (fld "contingutFitxer") donde aparecen los resultados de la elección.
Figura 4-9. Ejemplo de uso de un campo de texto que permite un comportamiento de lista: seleccionando sus contenidos de forma agrupada y por líneas.
Pongamos a prueba nuestra imaginación y veamos una posible utilización del tipo de control "campo de texto" en una aplicación que precisa confirmar que existen una serie de ficheros para poder actuar sobre ellos. Este ejemplo propone elegir un fichero de los que aparecen en el campo de texto de la parte superior derecha de la aplicación, para listar su contenido en el otro campo de texto Para ello deberá disponer de un contenido que es el que asegura el código de la tarjeta que tiene la forma siguiente:
# La tarjeta on openCard put fld "fitxersNecessaris" into vAux repeat with i = the number of lines of vAux down to 1 if not( exists( line i of vAux) ) then delete line i of vAux end if end repeat if ( vAux is empty ) then put "Error:" & return & \ ("Directori actual: " & the directory & return &\ "Els fitxers:" & return & vAux) \ end if end openCard
Este código carga la lista de ficheros del primer campo de texto y comprueba que existen los allí leídos, si no va borrando su nombre de una lista temporal. Si no existe ninguno de ellos se obtiene un mensaje de error. El control fld "fitxersNecessaris" es uno de tipo field (sólo que se ha utilizado una abreviatura del nombre del tipo) y deber ser configurado para que responda de la manera prevista, por lo que se ha dispuesto que tenga activadas las propiedades:
Así, que sólo queda la parte más sencilla: actuar en consecuencia cuando lo decida la acctión del usuario y obteniendo la información necesaria en ese momento. Esto se ilustra en el código siguiente.
# El campo de texto funcionando en modo lista on mouseUp put the clickLine into vNomFitxer put vNomFitxer put url ("file:" & vNomFitxer) into fld "contingutFitxer" end mouseUp
Aviso |
Images dins de camps de text: imageSource |