Recursos

4D - Documentation   Français   English   German   Español   English   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente

versión 11 (Modificado)


Notas de compatibilidad sobre los mecanismos de gestión de recursos (4D v11)


La gestión de recursos ha sido modificada en 4D a partir de la v11. Conforme a las direcciones especificadas por Apple e implementadas en las versiones Mac OS más recientes, el concepto de recursos en el sentido más estricto (ver la definición más adelante) ahora es obsoleto y será abandonado progresivamente. Se han implementado nuevos mecanismo para soportar las necesidades que antes eran cubiertas por recursos: archivos XLIFF para la traducción de cadenas de caracteres, archivos de imágenes .png... De hecho, los archivos de recursos serán reemplazados a favor de los archivos de tipo estándar. 4D acompaña esta evolución y, a partir de la versión 11, ofrece nuevas herramientas para la gestión de traducciones de bases de datos, mientras mantiene la compatibilidad con los sistemas existentes.

Compatibilidad

Para mantener la compatibilidad y con el fin de permitir la adaptación progresiva a las aplicaciones existentes, los mecanismos de gestión de recursos continúan funcionando en 4D v11, con unas pequeñas diferencias:

Cuando están presentes, los archivos de recursos aún son soportados por 4D y el principio de la "cadena de archivos de recursos" (apertura sucesiva de varios archivos de recursos) continúa siendo válida. La "cadena de archivos de recursos" incluye particularmente los archivos .rsr o . 4dr de bases de datos convertidas (abiertos automáticamente) y los archivos de recursos personalizados abiertos utilizando los comandos de este tema.

Sin embargo, por razones relacionadas con la evolución de la arquitectura interna, ya no es posible acceder directamente a los recursos de la aplicación 4D ni a aquellos del sistema, bien sea a través de los comandos de este tema o utilizando referencias dinámicas. Algunos desarrolladores utilizan los recursos internos de 4D para sus interfaces (por ejemplo, los recursos que contienen los nombres de los meses o de los comandos del lenguaje). Esta práctica ahora está prohibida. En la mayoría de los casos, es posible utilizar otros medios en lugar de los recursos internos de 4D (constantes, comandos del lenguaje, etc.). Para limitar el impacto de esta modificación en bases existentes, se ha implementado un sistema de substitución, basado en externalizar los recursos que se utilizan con más frecuencia. Sin embargo, se recomienda cambiar las bases convertidas y eliminar las llamadas a recursos internos de 4D.

Las bases de datos creadas con 4D a partir de la v11 no incluyen por defecto los archivos .RSR (recursos de estructura) y .4DR (recursos de datos).

Nuevos principios de gestión de recursos

En 4D v11, la noción de "recursos" ahora debe entenderse como "archivos necesarios para la traducción de la interfaz de las aplicaciones." La nueva arquitectura de recursos está basada en una carpeta, llamada Resources, que debe estar ubicada junto al archivo de estructura de la base (.4db o .4dc). La carpeta no se crea por defecto; tendrá que crearla si su base utiliza recursos. En esta carpeta, debe colocar todos los archivos que son necesarios para la traducción o personalización de la interfaz de la aplicación (archivos de tipo imagen, archivos de tipo texto, archivos XLIFF, etc.)

También puede contener archivos de recursos de "antigua generación" de la base (archivos .rsr). Atención, estos archivos no se incluyen automáticamente en la cadena de recursos; deben abrirse utilizando los comandos estándar de gestión de recursos 4D. 4D utiliza mecanismos automáticos cuando trabaja con los contenidos de esta carpeta, particularmente para la gestión de archivos XLIFF (este punto se cubre en el Manual de Diseño). Dos comandos del tema "Recursos" pueden utilizarse para aprovechar esta arquitectura (ver los comandos Get indexed string y STRING LIST TO ARRAY).

Gestión de recursos (principios tradicionales)


Nota de compatibilidad: los principios tradicionales de gestión de recursos están siendo abandonados progresivamente en 4D (ver párrafo anterior). Para bases nuevas, ahora es recomendable confiar en la arquitectura XLIFF o utilizar los archivos estándar.

¿Qué es un recurso?

Un recurso reagrupa datos de todo tipo, estructurados en un formato definido, y guardado en un archivo separado o en el resource fork ("parte de recursos") de un archivo Mac OS. Generalmente, los recursos contienen cadenas de caracteres, imágenes, íconos, etc. De hecho, puede crear y utilizar sus propios tipos de recursos y guardar todos los datos que quiera en ellos.

Data Fork, Resource Fork y archivo de recursos


Originalmente, en Macintosh, los datos y los recursos se guardaban en el mismo archivo, formado por un data fork ("parte de datos") y un resource fork (parte de recursos). El data fork de un archivo Macintosh es el equivalente a un archivo Windows o UNIX. El resource fork de un archivo Macintosh contiene los recursos específicos Mac OS del archivo y no tiene equivalente directo en Windows o UNIX.

Aunque esta característica aún es soportada por 4D, ahora en Mac OS como también en Windows, los recursos son almacenados en un archivo separado (de tipo "data fork" en Mac OS). Este principio es administrado de manera transparente por 4D y permite intercambiar los archivos entre las diferentes plataformas sin realizar conversiones.

Los comandos de gestión de archivos de recursos (Create resource file y Open resource file) pueden trabajar directamente en data fork para una mejor compatibilidad multiplataforma.

Archivos de recursos


En las bases de datos creadas con una versión de 4D anterior a la v11, 4D creaba automáticamente un archivo .rsr para guardar los recursos del archivo de estructura y un archivo .4dr para los recursos de los archivos de datos.

La misma aplicación 4D utiliza recursos, guardados en un archivo ".RSR". Los Plug-ins 4D como por ejemplo 4D Write, pueden también utilizar recursos.

Creación de sus propios archivos de recursos


Además de los archivos de recursos ofrecidos por 4D, puede crear y utilizar sus propios archivos de recursos utilizando los comandos 4D Create resource file y Open resource file. Estos dos comandos devuelven un número de referencia del archivo de recursos que identifica de manera única el archivo de recursos abierto. Este número equivale al número de referencia del documento devuelto para archivos estándar, por los comandos del tema Documentos del sistema, tal como

Open document. Todos los comandos 4D de gestión de recursos esperan un número de referencia del archivo de recursos (opcional). Una vez haya terminado con un archivo de recursos, recuerde cerrarlo utilizando el comando CLOSE RESOURCE FILE.

La cadena de los archivos de recursos


Cuando trabaja con una base 4D, puede utilizar todos los archivos de recursos abiertos o un archivo de recursos específico.

Es posible abrir simultáneamente varios archivos de recursos. Este es siempre el caso cuando se utiliza una base 4D. Los siguientes archivos están abiertos:

En Macintosh, el archivo de recursos del sistema.

En Windows, el archivo ASIPORT.RSR (contiene parte de los recursos sistema de Macintosh).

El archivo de recursos de la aplicación 4D.

El archivo de recursos de la estructura de la base (si existe).

El archivo de recursos de datos de la base (si existe).

Finalmente, usted puede abrir su propio archivo de recursos con ayuda del comando Open resource file.

Esta lista de archivos de recursos abiertos se llama la cadena de archivos de recursos. Puede buscar un recurso en particular de dos formas:

Si pasa un número de referencia del archivo de recursos a un comando 4D de gestión de recursos, el recurso se busca en ese archivo de recursos únicamente.

Si no pasa un número de referencia del archivo de recursos al comando 4D, el recurso se busca en todos los archivos de recursos abiertos, comenzando por el archivo abierto más recientemente y terminando con el archivo abierto de primero. La cadena de los archivos abiertos de recursos se revisa en sentido contrario a la apertura—el último archivo de recursos abierto se revisa de primero.

Este es un ejemplo:

   $vhResArchivo:=Create resource file("Simple_archivo")
   If (OK=1)
      ARRAY STRING(63;asAlgunasCadenas;0)
      STRING LIST TO ARRAY(8;asAlgunasCadenas;$vhResArchivo)
      ALERT("El tamaño del array es "+String(Size of array(asAlgunasCadenas))+" elemento(s).")
      STRING LIST TO ARRAY(8;asAlgunasCadenas)
      ALERT("El tamaño del array es "+String(Size of array(asAlgunasCadenas))+" elemento(s).")
      CLOSE RESOURCE FILE($vhResArchivo)
   End if 

Durante la ejecución de este método, la primera alerta muestra "El tamaño del array es 0 elemento(s)" y la segunda alerta muestra "El tamaño del array es 634 elemento(s)".

La primera llamada:

      STRING LIST TO ARRAY(8;asAlgunasCadenas;$vhResArchivo)

busca el recurso "STR#" ID=8 únicamente en el archivo de recursos que acaba de ser creado y abierto por el comando Create resource file. Como el archivo es nuevo y por lo tanto está vacío, no se encuentra el recurso.

La segunda llamada:

      STRING LIST TO ARRAY(8;asAlgunasCadenas)

busca el recurso "STR#" ID=8 en todos los archivos de recursos abiertos. Como el archivo acaba de ser creado y abierto (por Create resource file) no contiene ese recurso, luego STRING LIST TO ARRAY busca el recurso en el archivo de recursos de la estructura de la base. Este archivo de recursos tampoco contiene ese recurso, de manera que STRING LIST TO ARRAY examina el archivo de recursos de 4D, encuentra el recurso en este archivo y llena el array con él.

Conclusión: cuando trabaje con los archivos de recursos, asegúrese de pasar un número de referencia del archivo de recursos a los comandos 4D de gestión de recursos, si quiere acceder a un archivo específico. De lo contrario, el comando asume que a usted no le preocupa cuál archivo es la fuente de los recursos.

Tipos de recursos


El formato interno de un archivo de recursos es bastante estructurado. Además de los datos de cada recurso, el archivo contiene un encabezado y un mapa que describe completamente su contenido.

Los recursos están clasificados por tipos. El tipo de un recurso se indica por una cadena de 4 caracteres. Los caracteres diacríticos y las mayúsculas/minúsculas se tienen en cuenta. Por ejemplo, los tipos de recursos "Hola_!", "hola_!" y "HOLA_!" son todos diferentes.

Importante: los tipos de recursos con caracteres en minúsculas están reservados para el sistema operativo. Evite designar sus propios tipos de recursos con caracteres en minúsculas.

La siguiente es una lista de algunos de los tipos de recursos más comúnmente utilizados:

Un recurso de tipo "STR#" es un recurso que contiene una lista de cadenas Pascal. Este recurso se llama recurso lista de cadenas.

Un recurso de tipo "STR " (note que el cuarto carácter es un espacio) es un recurso que contiene una cadena Pascal individual. Este recurso se llama recurso cadena.

Un recurso de tipo "TEXT" es un recurso que contiene una cadena de texto sin longitud declarada. Este recurso se llama un recurso texto.

Un recurso de tipo "PICT" es un recurso que contiene una imagen QuickDraw Macintosh que puede utilizar y mostrar en Macintosh y Windows con 4D. Este recurso se llama un recurso imagen.

Un recurso de tipo "cicn" es un recurso que contiene un icono de color Macintosh que puede utilizar y mostrar en Mac OS y Windows con 4D. Este recurso se llama recurso icono color. Por ejemplo, un recurso "cicn" puede asociarse a un elemento de una lista jerárquica, utilizando el comando SET LIST ITEM PROPERTIES.

Además de los tipos de recursos estándar, puede crear sus propios tipos. Por ejemplo, puede decidir trabajar con recursos de tipo "MTYP" (para "Mi Tipo").

Para obtener la lista de tipos de recursos presentes en todos los archivos de recursos abiertos o en un archivo de recursos en particular, utilice el comando RESOURCE TYPE LIST. Para obtener la lista de recursos de un cierto tipo en los archivos de recursos abiertos o en un archivo de recurso en particular, utilice el comando RESOURCE LIST. Este comando devuelve los identificadores y los nombres (ver la próxima sección) de todos los recursos de un tipo dado.

Advertencia: muchas aplicaciones se apoyan en el tipo de los recursos para tratar su contenido. Por ejemplo, cuando acceden a un recurso "STR#", las aplicaciones esperan encontrar una lista de cadenas. NO almacene datos inconsistentes en recursos de tipo estándar; esto puede provocar errores del sistema en su aplicación 4D o en otras aplicaciones.

Advertencia: un recurso es un archivo muy estructurado, NO debe acceder al archivo de recursos con comandos diferentes a los comandos de recursos. Note que nada evitará que usted pase un número de referencia de archivo de recursos (en forma de una expresión 4D de tipo hora como el número de referencia del documento) a un comando como SEND PACKET. Sin embargo, si lo hace, probablemente dañará el archivo de recursos.

Advertencia: un archivo de recursos puede contener cerca de 2 700 recursos individuales. NO intente sobrepasar este límite. Tenga en cuenta que nada evitará que lo haga; sin embargo, dañará el archivo de recursos y lo volverá inutilizable.

Nombre y número de recurso


Un recurso tiene un número de recurso. Un número de recurso puede contener hasta 255 caracteres, tiene en cuenta los caracteres diacríticos pero no diferencia entre mayúsculas y minúsculas. Los nombres de los recursos pueden ser utilizados para la identificación visual, pero usted accede a un recurso utilizando su tipo y su número de identificación. Los nombres de los recursos no son únicos; varios recursos pueden tener el mismo nombre.

Todo recurso tiene un número de identificación (número de ID o ID). Este número es único al interior de un tipo y de un archivo de recursos. Por ejemplo:

Un archivo de recurso puede contener un recurso "ABCD" ID=1 y un recurso "EFGH" ID=1.

Dos archivos de recursos pueden contener un recurso del mismo tipo y del mismo número.

Cuando acceda a un recurso por intermedio de un comando 4D, indique su tipo y su número. Si no especifica el archivo de recursos en el cual buscar el recurso, el comando devuelve la ocurrencia del recurso encontrad. Recuerde que los archivos de recursos son examinados en el orden inverso en el cual fueron se abrieron.

Los números de los recursos están entre -32 768 y 32 767.

Importante: utilice el rango entre 15 000 y 32 767 para sus propios recursos. NO utilice números de recursos negativos; estos están reservados para el sistema operativo. NO utilice números entre 0 y 14 999; este rango está reservado para 4D.

Para obtener los identificadores y los nombres de los recursos de un tipo dado, utilice el comando RESOURCE LIST.

Para obtener el nombre de un recurso individual, utilice el comando Get resource name.

Para cambiar el nombre de un recurso individual, utilice el comando SET RESOURCE NAME.

Como cada comando 4D acepta de manera opcional un número de referencia del archivo de recursos, puede fácilmente tratar recursos que tienen el mismo tipo y número pero que están en dos archivos de recursos diferentes. El siguiente ejemplo copia todos los recursos "PICT" de un archivo de recursos a otro:

      ` Apertura de un archivo de recursos existente
   $vhResArchivoA:=Open resource file("")
   If (OK=1)
         ` Creación de un nuevo archivo de recursos
      $vhResArchivoB:=Create resource file("")
      If (OK=1)
            ` Recuperar la lista de números y de nombres de todos los recursos de tipo "PICT"
            ` ubicados en el archivo de recursos A
         RESOURCE LIST("PICT";$aiResID;$asResNombre;$vhResArchivoA)
            ` Para cada recurso:
         For($vlElem;1;Size of array($aiResID))
            $viResID:=$aiResID{$vlElem}
               ` Cargar el recurso del archivo A
            GET RESOURCE ("PICT";$viResID;vxResData;$vhResArchivoA)
               ` Si se puede cargar el recurso 
            If (OK=1)
                  ` Añadir y escribir el recurso en el archivo B
               SET RESOURCE ("PICT";$viResID;vxResData;$vhResArchivoB)
                  ` Si el escrito puede ser añadido y escrito
               If (OK=1)
                     ` Copie también el nombre del recurso
                  SET RESOURCE NAME("PICT";$viResID;$asResNombre{$vlElem};$vhResArchivoB)
                     ` Así como sus propiedades (ver Resource Properties más adelante)
                  $vlResAttr:=Get resource properties("PICT";$viResID;$vhResArchivoA)
                  SET RESOURCE PROPERTIES("PICT";$viResID;$vlResAttr;$vhResArchivoB)
               Else
                  ALERT("El recurso PICT ID="+String($viResID)+" no se pudo añadir.")
               End if
            Else
               ALERT("El recurso PICT ID="+String($viResID)+" no se pudo cargar.")
            End if
         End for
         CLOSE RESOURCE FILE($vhResArchivoB)
      End if
      CLOSE RESOURCE FILE($vhResArchivoA)
   End if

Propiedades de los recursos


Además de su tipo, nombre y número, un recurso tiene propiedades adicionales (también llamadas atributos). Por ejemplo, un recurso puede ser purgable o no. Este atributo indica al sistema operativo si el recurso puede ser purgado o no, una vez s cargue en memoria, cuando sea necesario liberar memoria para ubicar otro objeto. Como se mostró en el ejemplo anterior, durante la creación o copia de un recurso, puede ser importante no sólo copiar el recurso, si no también su nombre y propiedades. Para mayor información sobre las propiedades de los recursos, consulte la descripción de los comandos Get resource properties y SET RESOURCE PROPERTIES.

Manejo del contenido de los recursos


Para cargar un recurso de cualquier tipo en memoria, utilice GET RESOURCE, que devuelve el contenido del recurso en un BLOB.

Para crear o reescribir un recurso en disco, llame SET RESOURCE, que utiliza el contenido del BLOB que usted pasa para el contenido del recurso.

Para borrar un recurso existente, utilice el comando DELETE RESOURCE.

Para simplificar el manejo de los recursos, 4D dispone de comandos integrados adicionales para evitarle tener que analizar un BLOB para extraer los datos del recurso:

STRING LIST TO ARRAY llena un array de tipo Alfa o Texto con las cadenas de caracteres contenidas en un recurso lista de cadenas.

ARRAY TO STRING LIST crea o reescribe un recurso lista de cadenas con los elementos de un array de tipo Alfa o Texto.

Get indexed string devuelve una cadena particular de un recurso lista de cadenas.

Get string resource devuelve la cadena de un recurso cadena.

SET STRING RESOURCE crea o rescribe un recurso cadena.

Get text resource devuelve el texto de un recurso texto.

SET TEXT RESOURCE crea o rescribe un recurso texto.

GET PICTURE RESOURCE devuelve la imagen de un recurso imagen.

SET PICTURE RESOURCE crea o rescribe un recurso imagen.

GET ICON RESOURCE devuelve un icono color como una imagen.

Note que estos comandos se ofrecen con el fin de simplificar el empleo de los recursos de tipo estándar; sin embargo, puede utilizar GET RESOURCE y SET RESOURCE con BLOBs. Por ejemplo, la línea de código siguiente:

   ALERT(Get text resource(20000))

es el equivalente corto de:

   GET RESOURCE("TEXT";20000;vxData)
   If (OK=1)
      $vlOffset:=0
      ALERT(BLOB to text(vxData;Text without length;$vlOffset;BLOB size(vxData)))
   End if

Los comandos 4D y los recursos


Además de los comandos de recursos descritos en este capítulo, hay otros comandos 4D que permiten trabajar con archivos de recursos:

En Macintosh, DOCUMENT TO BLOB y BLOB TO DOCUMENT pueden cargar y escribir la totalidad del recurso fork de un archivo Macintosh.

Utilizando los comandos SET LIST ITEM PROPERTIES y SET LIST PROPERTIES, puede asociar los recursos de imágenes o iconos de color a los elementos de una lista o utilizar los recursos iconos color como nodos de una lista.

El comando PLAY ejecuta los recursos "snd " en Macintosh y Windows.

El comando SET CURSOR cambia la apariencia del ratón utilizando recursos "CURS".

Ver también

Comandos BLOB, Errores de gestión de recursos del sistema, Get component resource ID.


4D - Documentation   Français   English   German   Español   English   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente