Campos de texto (field)

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 .

Figura 4-7. Aspecto y propiedades de un objeto tipo "field" (campo de texto).

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:

Sobre estas funciones es posible:

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.

Figura 4-8. Captura de ejemplo de la pila desarrollada para obtener el acrónimo de un texto.

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:

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:

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:

Figura 4-10. Propiedades que dotan de un comportamiento de lista a un campo de texto.

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