Ressources

4D - Documentation   Français   English   German   Español   Japanese   4D v11 SQL, Commandes par thèmes   4D v11 SQL, Liste alphabétique des commandes   4D v11 SQL, Constantes par thèmes   Retour   Précédent   Suivant

version 11 (Modifiée)


Notes de compatibilité sur les mécanismes de gestion des ressources (4D v11)


La gestion des ressources a été modifiée dans 4D à compter de la v11. Conformément aux orientations définies par Apple et mises en oeuvres dans les versions de Mac OS les plus récentes, le concept de ressources au sens strict (cf. définition ci-dessous) est désormais obsolète et va être progressivement abandonné. De nouveaux mécanismes sont mis en place pour prendre en charge les besoins précédemment couverts par les ressources : fichiers XLIFF pour la traduction des chaînes de caractères, fichiers images .png... De fait, les fichiers de ressources disparaissent au profit de fichiers de type standard. 4D accompagne cette évolution et, à partir de la v11, propose de nouveaux outils pour la gestion des traductions des bases de données, tout en maintenant la compatibilité avec les systèmes existants.

Compatibilité

Pour le maintien de la compatibilité et afin de permettre l'adaptation progressive des applications existantes, les mécanismes de gestion des ressources continuent de fonctionner dans 4D v11, à quelques différences près :

Lorsqu'ils sont présents, les fichiers de ressources sont toujours pris en charge par 4D et le principe de la "chaîne des fichiers de ressources" (ouverture successive de plusieurs fichiers de ressources) reste valide. La "chaîne des fichiers de ressources" comprend notamment les fichiers .rsr ou .4dr. des bases de données converties (ouverts automatiquement) et les fichiers de ressources personnalisés ouverts via les commandes de ce thème.

Toutefois, pour cause d'évolution de l'architecture interne, il n'est plus possible d'accéder directement via ces commandes (ou via les références dynamiques) aux ressources de l'application 4D ni à celles du système. Certains développeurs ont pu tirer parti de ressources internes de 4D pour leurs interfaces (par exemple les ressources contenant les noms des mois ou ceux des commandes du langage). Cette pratique est désormais à proscrire. Dans la plupart des cas, il est possible d'utiliser d'autres moyens que les ressources internes de 4D (constantes, commandes du langage...). Afin de limiter l'impact de cette modification sur les bases existantes, un système de substitution a été mis en place, basé sur l'externalisation des ressources les plus utilisées. Il est cependant fortement conseillé de faire évoluer les bases de données converties et de supprimer les appels aux ressources internes de 4D.

Les bases de données créées avec 4D à partir de la v11 ne comportent plus par défaut de fichiers .RSR (ressources de la structure) et .4DR (ressources des données).

Nouveaux principes de gestion des ressources

Dans 4D v11, la notion de "ressources" doit désormais être entendue au sens large comme "fichiers nécessaires à la traduction de l'interface des applications". La nouvelle architecture des ressources s'appuie sur un dossier, nommé Resources, impérativement situé à côté du fichier de structure de la base (.4db ou .4dc). Il n'est pas créé par défaut, vous devez le créer si votre base utilise des ressources. Vous devez placer dans ce dossier tous les fichiers nécessaires à la traduction ou la personnalisation de l'interface de l'application (fichiers image, texte, XLIFF...).

Il peut également contenir les éventuels fichiers de resources "ancienne génération" de la base (fichiers .rsr). Attention, ces fichiers ne sont pas automatiquement inclus dans la chaîne des ressources, ils devront être ouverts via les commandes standard de manipulation des ressources de 4D. 4D utilise des mécanismes automatiques pour l'exploitation du contenu de ce dossier, notamment pour la gestion des fichiers XLIFF (ce point est traité dans le manuel Mode Développement). Deux commandes du thème "Ressources" permettent de tirer parti de cette architecture (cf. commandes Lire chaine dans liste et LISTE DE CHAINES VERS TABLEAU).

Gestion des ressources (principes traditionnels)


Note de compatibilité : les principes traditionnels de gestion des ressources sont progressivement abandonnés dans 4D (cf. paragraphe précédent). Dans le cadre de nouvelles bases de données, il est désormais conseillé de s'appuyer sur l'architecture XLIFF ou sur l'emploi de fichiers standard.

Qu'est-ce qu'une ressource ?

Une ressource regroupe des données de tout type, structurées dans un format défini, et stockées dans un fichier séparé ou dans la resource fork ("partie de ressources") d'un fichier Mac OS. Généralement, les ressources contiennent des chaînes de caractères, des images, des icônes, etc. En fait, vous pouvez créer et utiliser vos propres types de ressources et y stocker toutes les données que vous voulez.

Data fork, Resource fork et fichier de ressources

A l'origine, sur Macintosh, les données et les ressources étaient stockées dans le même fichier, constitué d'une data fork ("partie de données") et d'une resource fork ("partie de ressources"). La data fork d'un fichier Macintosh est l'équivalent d'un fichier Windows ou UNIX. La resource fork d'un fichier Macintosh contient les ressources spécifiques Mac OS du fichier et n'a pas d'équivalent direct sous Windows ou UNIX.

Bien que ce fonctionnement soit toujours pris en charge par 4D, désormais sous Mac OS comme sous Windows, les ressources sont stockées dans un fichier séparé (de type "data fork" sous Mac OS). Ce principe est géré de façon transparente par 4D et permet d'échanger les fichiers entre les différentes plates-formes sans qu'aucune conversion ne soit nécessaire.

Les commandes de gestion des fichiers de ressources (Creer fichier ressources et Ouvrir fichier ressources) permettent de travailler directement en data fork pour une meilleure compatibilité multi-plate-forme.

Fichiers de ressources

Dans les bases de données créées avec une version de 4D antérieure à la v11, 4D a créé automatiquement un fichier suffixé .rsr afin de stocker les ressources du fichier de structure et un fichier .4dr pour les ressources du fichier de données.

L'application 4D elle-même fait appel à des ressources, stockées dans un fichier suffixé ".RSR". Les plug-ins 4D, comme par exemple 4D Write, peuvent également utiliser des ressources.

En plus des fichiers de ressources fournis par 4D, vous pouvez créer et utiliser vos propres fichiers de ressources à l'aide des commandes 4D Creer fichier ressources et Ouvrir fichier ressources. Lorsque leur exécution s'est déroulée correctement, ces deux commandes retournent un numéro de référence de fichier de ressources identifiant de manière unique le fichier de ressources ouvert. Ce numéro équivaut au numéro de référence de document retourné, pour les fichiers standard, par les commandes du thème Documents système, telles que Ouvrir document. Toutes les commandes 4D de gestion des ressources acceptent un numéro de référence de fichier de ressources (facultatif). Une fois que vous en avez terminé avec un fichier de ressources, n'oubliez pas de le refermer en appelant la commande FERMER FICHIER RESSOURCES.

La chaîne des fichiers de ressources

Lorsque vous travaillez avec une base 4D, vous pouvez soit utiliser tous les fichiers de ressources ouverts soit un fichier de ressources particulier.

Plusieurs fichiers de ressources peuvent être ouverts simultanément. C'est d'ailleurs toujours le cas lorsqu'une base 4D est en cours d'utilisation :

Sur Macintosh, le fichier de ressources du système est ouvert.

Sous Windows, le fichier ASIPORT.RSR est ouvert (il contient une partie des ressources système du Macintosh).

Le fichier de ressources de l'application 4D est ouvert.

Le fichier de ressources de la structure de la base est ouvert (s'il existe).

Le fichier de ressources des données de la base est ouvert (s'il existe).

Enfin, vous pouvez ouvrir votre propre fichier de ressources à l'aide de la fonction Ouvrir fichier ressources.

Cette liste de ressources ouvertes s'appelle la chaîne des fichiers de ressources. Lorsque vous recherchez une ressource particulière, celle-ci peut être désignée de deux manières :

Si vous passez un numéro de référence de fichier de ressources à une commande 4D de gestion des ressources, la ressource est recherchée dans ce fichier uniquement.

Si vous ne passez pas de numéro de référence de fichier de ressources à la commande 4D, la ressource est recherchée dans tous les fichiers de ressources ouverts, depuis le plus récemment ouvert jusqu'au premier ouvert. 4D remonte en sens inverse la chaîne des fichiers de ressources ouverts : le dernier fichier ouvert est examiné en premier.

Types de ressources

Le format interne d'un fichier de ressources est très structuré. En plus des données de chaque ressource, le fichier contient un en-tête et un descriptif qui fournissent des informations précises sur son contenu.

Les ressources sont classées en types. Le type d'une ressource est indiqué par une chaîne de 4 caractères. Par exemple :

Une ressource de type "STR#" est une ressource contenant une liste de chaînes Pascal. Elle est appelée ressource liste de chaînes.

Une ressource de type "STR " (notez que le quatrième caractère est un caractère d'espacement) est une ressource contenant une chaîne Pascal individuelle. Elle est appelée ressource chaîne.

Une ressource de type "TEXT" est une ressource contenant du texte sans longueur déclarée. Elle est appelée ressource texte.

Une ressource de type "PICT" est une ressource contenant une image QuickDraw Macintosh que vous pouvez utiliser et afficher sous Mac OS et Windows avec 4D. Elle est appelée ressource image.

Une ressource de type "cicn" est une ressource contenant une icône couleur Macintosh que vous pouvez utiliser et afficher sous Mac OS et Windows avec 4D. Une ressource "cicn" peut, par exemple, être associée à un élément d'une liste hiérarchique à l'aide de la commande CHANGER PROPRIETES ELEMENT. Elle est appelée ressource icône couleur.

En plus des types de ressources standard (la liste ci-dessus n'est pas exhaustive), vous pouvez créer vos propres types. Par exemple, vous pouvez décider de travailler avec des ressources du type "MTYP" (pour "Mon Type").

Pour obtenir la liste des types de ressources présents parmi tous les fichiers ouverts ou dans un fichier particulier, utilisez la commande LISTE TYPES RESSOURCE. A l'inverse, pour obtenir la liste des ressources d'un certain type parmi tous les fichiers de ressources ouverts ou dans un fichier de ressources particulier, utilisez la commande LISTE RESSOURCES. Cette dernière retourne les numéros et les noms (cf. section suivante) de toutes les ressources d'un type particulier.

Un type de ressource est toujours indiqué par une chaîne de 4 caractères. Les caractères diacritiques et les majuscules/minuscules sont pris en compte. Par exemple, les types de ressources "Hi_!", "hi_!" et "HI_!" sont tous différents.

Important : Les types de ressources en caractères minuscules sont réservés pour le Système d'exploitation. Evitez de désigner vos propres types de ressources en utilisant des caractères minuscules.

ATTENTION : De nombreuses applications s'appuient sur le type des ressources pour traiter leur contenu. Par exemple, lorsqu'elles accèdent à une ressource "STR#", les applications s'attendent à trouver une liste de chaînes. Ne stockez pas de données atypiques dans des ressources de type standard, cela peut provoquer des erreurs système dans vos applications 4D ou dans d'autres applications.

ATTENTION : Comme un fichier de ressources est très structuré, vous ne devez pas y accéder par des commandes autres que celles de gestion des ressources. Notez que si vous passez un numéro de référence de fichier de ressources (sous forme d'une expression 4D de type heure, tout comme pour les numéros de référence de document) à une commande telle que ENVOYER PAQUET, rien ne vous en empêchera (aucune mise en garde ne vous est adressée). Mais il est très probable que le fichier de ressources soit endommagé par l'opération.

ATTENTION : Un fichier de ressources peut contenir jusqu'à 2 700 ressources individuelles. Prenez garde à ne pas de dépasser cette limite (aucune mise en garde ne vous est adressée, mais le fichier de ressources devient endommagé et inutilisable).

Nom et numéro de ressource

Toute ressource a un nom de ressource. Un nom de ressource peut contenir jusqu'à 255 caractères, tient compte des caractères diacritiques mais n'établit pas de distinction entre les majuscules et les minuscules. Les noms des ressources peuvent être utiles pour leur identification visuelle, mais généralement vous accèderez à une ressource par l'intermédiaire de son numéro. Les noms des ressources ne sont pas uniques, plusieurs ressources peuvent avoir le même nom.

Toute ressource a un numéro d'identification (on dit aussi numéro d'ID ou ID). Ce numéro d'ID est unique à l'intérieur d'un type et d'un fichier de ressources. Par exemple :

Un fichier de ressource peut contenir une ressource "ABCD" ID=1 et une ressource "EFGH" ID=1.

Deux fichiers de ressources peuvent contenir une ressource de même type et de même numéro.

Lorsque vous accédez à une ressource par l'intermédiaire d'une commande 4D, vous indiquez son type et son numéro. Si vous ne spécifiez pas le fichier de ressources dans lequel vous souhaitez la rechercher, la commande retournera l'occurrence de la ressource trouvée dans le premier fichier de ressource examiné. Rappelez-vous que les fichiers de ressources sont examinés dans l'ordre inverse de celui dans lequel ils ont été ouverts.

Les numéros de ressources sont compris entre -32 768 et 32 767.

Important : N'utilisez pas de numéros de ressources négatifs, ils sont réservés au Système d'exploitation. N'utilisez pas non plus de numéros situés entre 0 et 14 999, cet intervalle est réservé à 4D. Pour vos propres ressources, utilisez les numéros situés entre 15 000 et 32 767.

Pour obtenir les numéros et les noms de ressources d'un type particulier, utilisez la commande LISTE RESSOURCES.

Pour obtenir le nom d'une ressource individuelle, utilisez la commande Lire nom ressource.

Pour changer le nom d'une ressource individuelle, utilisez la commande ECRIRE NOM RESSOURCE.

Comme chaque commande 4D accepte de manière optionnelle un numéro de référence de fichier de ressources, vous pouvez facilement manipuler des ressources ayant le même type et le même numéro mais situées dans deux fichiers de ressources différents. L'exemple suivant copie toutes les ressources "PICT" d'un fichier de ressources dans un autre :

      ` Ouverture d'un fichier de ressources existant
   $vhResFileA:=Ouvrir fichier ressources("")
   Si (OK=1)
         ` Création d'un nouveau fichier de ressources
      $vhResFileB:=Creer fichier ressources("")
      Si (OK=1)
            ` Récupérer la liste des numéros et des noms de toutes les ressources de type "PICT"
            ` situées dans le fichier de ressources A
         LISTE RESSOURCES("PICT";$aiResID;$asResName;$vhResFileA)
            ` Pour chaque ressource :
         Boucle($vlElem;1;Taille tableau($aiResID))
            $viResID:=$aiResID{$vlElem}
               ` Charger la ressource du fichier A
            LIRE RESSOURCE ("PICT";$viResID;vxResData;$vhResFileA)
               ` Si la ressource peut être chargée
            Si (OK=1)
                  ` Ecrire la ressource dans le fichier B
               ECRIRE RESSOURCE ("PICT";$viResID;vxResData;$vhResFileB)
                  ` Si la ressource peut être écrite
               Si (OK=1)
                     ` Copie également du nom de la ressource...
                  ECRIRE NOM RESSOURCE("PICT;$viResID;$asResName{$vlElem};$vhResFileB)
                     ` ...Ainsi que ses propriétés (cf. § ci-dessous) 
                  $vlResAttr:=Lire proprietes ressource("PICT";$viResID;$vhResFileA)
                  ECRIRE PROPRIETES RESSOURCE("PICT";$viResID;$vlResAttr;$vhResFileB)
               Sinon
                  ALERTE("La ressource PICT ID="+Chaine($viResID)+" ne peut être créée.")
               Fin de si
            Sinon
               ALERTE("La ressource PICT ID="+Chaine($viResID)+" ne peut pas être chargée.")
            Fin de si
         Fin de boucle
         FERMER FICHIER RESSOURCES($vhResFileB)
      Fin de si
      FERMER FICHIER RESSOURCES($vhResFileA)
   Fin de si

Propriétés des ressources

En plus de son type, de son nom et de son numéro, une ressource possède des propriétés supplémentaires (aussi appelées attributs). Par exemple, une ressource peut être purgeable ou non. Cet attribut indique au Système d'exploitation si, une fois la ressource chargée en mémoire, il peut ou non la purger (c'est-à-dire l'effacer) en cas de besoin de mémoire supplémentaire. Comme le montre l'exemple précédent, il peut être important lors de la copie ou de la création d'une ressource de ne pas copier uniquement la ressource, mais également son nom et ses propriétés. Pour plus d'informations sur les propriétés des ressources, reportez-vous aux descriptions des commandes Lire proprietes ressource et ECRIRE PROPRIETES RESSOURCE.

Manipuler le contenu des ressources

Pour charger en mémoire tout type de ressource, utilisez la commande LIRE RESSOURCE, qui retourne le contenu de la ressource dans un BLOB. Pour créer ou réécrire une ressource sur disque, appelez la commande ECRIRE RESSOURCE, qui utilise le contenu du BLOB que vous passez en paramètre pour écrire le contenu de la ressource. Pour supprimer une ressource existante, utilisez la commande SUPPRIMER RESSOURCE.

Pour simplifier la manipulation des ressources, 4D dispose de commandes intégrées supplémentaires dédiées à la gestion des ressources de type standard. Ces commandes vous évitent de devoir analyser des BLOBs pour pouvoir en extraire le contenu des ressources qui vous intéressent :

LISTE DE CHAINES VERS TABLEAU remplit un tableau Alpha ou Texte avec les chaînes de caractères contenues dans une ressource liste de chaînes.

TABLEAU VERS LISTE DE CHAINES crée ou réécrit une ressource liste de chaînes avec les éléments d'un tableau Alpha ou Texte.

Lire chaine dans liste retourne une chaîne particulière d'une ressource liste de chaînes.

Lire ressource chaine retourne la chaîne d'une ressource chaîne.

ECRIRE RESSOURCE CHAINE crée ou réécrit une ressource chaîne.

Lire ressource texte retourne le texte d'une ressource texte.

ECRIRE RESSOURCE TEXTE crée ou réécrit une ressource texte.

LIRE RESSOURCE IMAGE retourne l'image d'une ressource image.

ECRIRE RESSOURCE IMAGE crée ou réécrit une ressource image.

LIRE RESSOURCE ICONE retourne une icône couleur en tant qu'image.

Notez que ces commandes sont fournies afin de simplifier l'emploi des ressources de type standard, mais vous pouvez parfaitement utiliser LIRE RESSOURCE et ECRIRE RESSOURCE avec des BLOBs. Par exemple, la ligne de code suivante :

   ALERTE(Lire ressource texte(20000))

est équivalente (en plus court) à :

   LIRE RESSOURCE("TEXT";20000;vxData)
   Si (OK=1)
      $vlOffset:=0
      ALERTE(BLOB vers texte(vxData;UTF8 Texte sans longueur;$vlOffset;Taille BLOB(vxData)))
   Fin de si 

Les commandes 4D et les ressources

Outre les commandes de gestion des ressources décrites dans ce chapitre, plusieurs commandes 4D vous permettent de travailler avec des fichiers de ressources :

Sur Macintosh, DOCUMENT VERS BLOB et BLOB VERS DOCUMENT peuvent charger et écrire la totalité de la resource fork d'un fichier Macintosh.

A l'aide des commandes CHANGER PROPRIETES ELEMENT et CHANGER PROPRIETES LISTE, vous pouvez associer des ressources images ou icônes couleur aux éléments d'une liste, ou encore utiliser des ressources icônes couleur en tant qu'icônes des éléments parents d'une liste hiérarchique (déployés/contractés).

La commande JOUER SON joue des ressources "snd " (sous Mac OS et Windows).

La commande CHANGER POINTEUR SOURIS peut utiliser des ressources "CURS" pour modifier l'apparence du pointeur de la souris.

Référence

Commandes du thème BLOB, Erreurs du gestionnaire de ressources du système (-196 -> -1), Lire ID ressource composant.


4D - Documentation   Français   English   German   Español   Japanese   4D v11 SQL, Commandes par thèmes   4D v11 SQL, Liste alphabétique des commandes   4D v11 SQL, Constantes par thèmes   Retour   Précédent   Suivant