Lire / écrire vos paramétres d'application dans la base de registre ou fichier ini

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 064 fois - Téléchargée 31 fois

Contenu du snippet

FONCTION TRES UTILE :

Lecture / Ecriture dans la base de registre ou un fichier INI.
Mode Ecriture : On écrit la clé (créée automatiquement si besoin)
On écrit la valeur (dans un fichier créé automatiquemet si besoin)
Mode Lecture : Lit la valeur de la clé si elle existe.
Si elle n'existe pas la crée automatiquement avec la valeur par défaut précisée

Source / Exemple :


Function GetRegistryValueStr(KeyName, ValueName, Value : string; Write, FileAcces : boolean): string;
var
  Reg : TRegistry;    // nécessite d'ajouter dans les uses Registry
  Ini: TIniFile;      // nécessite d'ajouter dans les uses IniFiles
  Val : string;       // Valeur temporaire : Lue ou écrite, retournée par la fonction
begin
  // Lit des infos dans la base de registre ou un fichier ini (si elle n'existe pas les crées)...
  // Version : 1.00
  // Auteur : Fabien FERT
  // PARAMETRES :
  //    KeyName   : Nom de la clé de registre ou nom de la clé (groupe) du fichier ini
  //    ValueName : Nom de la valeur recherchée
  //    Value     : Valeur par défaut, si la clé (ValueName) n'existe pas
  //    Write     : True = Ecriture   -   False = Lecture (sauf si elle n'existe pas devient alors écriture)
  //    FileAcces : True = Accés par Fichier INI   -   False = Accés dans la base de registre
  //
  Val := Value;
  If FileAcces then
  begin
    // Lit les données dans le base de registre (ou crée une valeur par défaut si elle n'existe pas)
    Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
    try
      // lit / écris les données
      if Ini.ValueExists(KeyName, ValueName) then
      begin
        if write then
        begin
          // Ecris une valeur par défaut
          Ini.WriteString(KeyName, ValueName, Val);
        end
        else
        begin
          // Lit la valeur
          Val := Ini.ReadString(KeyName, ValueName, Val);
        end;
      end
      else
      begin
          // Ecris une valeur par défaut
          Ini.WriteString(KeyName, ValueName, Val);
      end;
    finally
      Ini.Free;
      inherited;
    end;
  end
  else
  begin
    // Lit les données dans le base de registre (ou crée une valeur par défaut si elle n'existe pas)
    Reg := TRegistry.Create;
    Val := Value;
    try
      Reg.RootKey := HKEY_LOCAL_MACHINE;  // CURRENT_USER; à vous de choisir !!!
      // 'SoftwareMicrosoftWindowsCurrentVersionRunOnce'
      if Reg.OpenKey(KeyName, True) then
      begin
        if (Reg.ValueExists(ValueName)) and not(write) then
        begin
          // Lit la valeur
          Val := Reg.ReadString(ValueName);
        end
        else
        begin
          // Ecris une valeur par défaut
          Reg.WriteString(ValueName, Val);
          Reg.CloseKey;
        end;
      end;
    finally
      Reg.Free;
      inherited;
    end;
  end;
  // Retourne la valeur Lue (ou écrite)
  GetRegistryValueStr := Val;
end;

Conclusion :


L'appel de cette fonction est des plus simple :
Valeur := GetRegistryValueStr('SoftwareDAOSSyscore', 'Hostname', 'LocalHost', False, True); // pour lire un fichier INI
Valeur := GetRegistryValueStr('SoftwareDAOSSyscore', 'Hostname', 'LocalHost', False, False); // pour lire dans la base de registre
Valeur := GetRegistryValueStr('SoftwareDAOSSyscore', 'Hostname', 'LocalHost', True, True); // pour écrire un fichier INI
Valeur := GetRegistryValueStr('SoftwareDAOSSyscore', 'Hostname', 'LocalHost', True, False); // pour écrire dans la base de registre

A voir également

Ajouter un commentaire

Commentaires

ffert
Messages postés
63
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
15 décembre 2009

Je suis d'accord mais pas lire et écrire en une seule ligne...

;-)

Mais quand j'aurais le temps j'essayrais de le transformer avec un TRegInifile ... Bien que les articles que j'ai trouvés parlent de windows 98 et NT mais pas de 2000 et XP, je ne sais pas si TRegInifile est compatible avec ces OS...

Un autre avantage de séparer l'accés à la base de registre de l'accés à un fichier INI est la compatibiltié avec Linux auquel cas quelques directives de compilations suffisent à faire focntionner mon code sous les 2 plateformes...

Mais je connais pas assez TRegInifile pour pouvoir comparer vraiment...

Bye
JulioDelphi
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
le le TRegIniFile a aussi la possibilité de lire via BDR ou INI.

en fait... le TRegInifile fait ce ke tu fais :D
ffert
Messages postés
63
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
15 décembre 2009

Effectivement, la TRefIniFile pourrait être utile... (jaurais d'ailleurs pu l'utiliser pour faire cette source, mais je suis de la vieille école désolé !!!)

En plus ma source permet en un seul appel de lire soit dans un fichier INI soit dans la base de registre, et dans le cas ou aucune valeur n'est présente de renseigner une valeur par défaut en créant la ligne (dans le Fichier INI) ou la clé de registre si besoins....

Donc en une seule ligne pas mal de possibilité !! non ???

bye
JulioDelphi
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
salut,

euh n'existe t-il pas deja la TRegIniFile ? ;-/

bye
ffert
Messages postés
63
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
15 décembre 2009

POUR CEUX QUI N'AURIENT PAS COMPRIS : cette fonction regroupe toutes les actions nécessaire pour la Lecture / Ecriture dans un fichier INI ou la base de registre. Pour l'utiliser dans vos application : copier / coller ce code dans votre application.

Valeur := GetRegistryValueStr('/Software/DAOS/Syscore', 'Hostname', 'LocalHost', False, True); // pour lire/écrire un fichier INI
Valeur := GetRegistryValueStr('/Software/DAOS/Syscore', 'Hostname', 'LocalHost', False, False); // pour lire/écrire dans la base de registre


Désolé, mais le site à supprimé les AntiSlash dans le chemin des clé de base de registre en exemple....
NOTA : vous devez donc remplacer les / par des antislash...
au lieu de SoftwareDAOSSyscore il faut lire Software/DAOS/Syscore

MERCI
en espérant que cela vous rende service....

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.