Utilisation des DLL de ressources

De RAD Studio
Aller à : navigation, rechercher

Remonter à Localisation des applications


L'exécutable, les DLL et les packages (fichiers .bpl) constituant votre application contiennent toutes les ressources nécessaires. Cependant, pour remplacer ces ressources par leurs versions localisées, il suffit simplement de fournir à l'application les DLL de ressource localisées portant le même nom que les fichiers exécutables, DLL ou packages.

Lorsque votre application démarre, elle vérifie les paramètres régionaux du système. Si elle trouve des DLL de ressources ayant les mêmes noms que les fichiers EXE, DLL ou BPL qu'elle utilise, elle examine l'extension de ces DLL. Si l’extension d'un module de ressources correspond à la langue et au pays des paramètres régionaux du système, votre application utilise les ressources de ce module plutôt que les ressources de l'exécutable, de la DLL ou du package. S'il n'y a pas de module de ressources correspondant à la fois à la langue et au pays, votre application essaie de trouver un module de ressources correspondant à la langue seule. S'il n'y a pas de module de ressources correspondant à la langue, votre application utilise les ressources compilées avec l'exécutable, la DLL ou le package.

Si vous voulez que votre application utilise un module de ressources différent de celui correspondant aux paramètres régionaux du système sur lequel elle s'exécute, vous pouvez définir une entrée "locale override" dans le registre Windows. Sous la clé HKEY_CURRENT_USER\Software\Embarcadero\Locales, sélectionnez la commande Nouveau > Valeur chaîne pour ajouter une nouvelle clé. Dans la colonne Nom, insérez le chemin et le nom du fichier exécutable de votre application sous la forme d'une valeur chaîne. Dans la colonne Données, insérez l'extension désirée de vos DLL de ressources. Au démarrage, l'application recherche les DLL de ressources portant cette extension avant de rechercher la localisation du système. L'affectation de cette entrée de registre permet de tester des versions localisées de votre application sans modifier la localisation de votre système. Pour de plus amples informations sur l'usage des clés de registre "locale override", voir Localisation des applications et Déploiement des applications localisées.

Par exemple, la procédure suivante peut être utilisée dans le programme d'installation ou de configuration afin de définir la localisation à utiliser au moment de charger des applications :

procedure SetLocaleOverride(const FileName, LocaleOverride: string);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    if Reg.OpenKey('Software\Embarcadero\Locales', True) then
      Reg.WriteString(FileName, LocaleOverride);
  finally
    Reg.Free;
  end;
end;
void SetLocalOverrides(char* FileName, char* LocaleOverride) {
	HKEY Key;
	const char* LocaleOverrideKey = "Software\\Embarcadero\\Locales";
	if (RegOpenKeyEx(HKEY_CURRENT_USER, LocaleOverrideKey, 0, KEY_ALL_ACCESS,
		&Key) == ERROR_SUCCESS) {
		if (lstrlen(LocaleOverride) == 3)
			RegSetValueEx(Key, FileName, 0, REG_SZ,
			(const BYTE*)LocaleOverride, 4);
		RegCloseKey(Key);
	}
}

Dans votre application, utilisez la fonction globale System.FindResourceHInstance pour obtenir le handle du module de ressources en cours. Par exemple :

LoadStr(FindResourceHInstance(HInstance), 
 IDS_AmountDueName, szQuery, SizeOf(szQuery));

 LoadString(FindResourceHInstance(HInstance),
  IDS_AmountDueName, szQuery, sizeof(szQuery));
LoadString(FindResourceHInstance(HInstance), IDS_AmountDueName, szQuery, sizeof(szQuery));

Vous pouvez ainsi distribuer une seule application qui s'adapte automatiquement à la localisation du système sur laquelle elle s'exécute en fournissant simplement les DLL de ressources.

Voir aussi