IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

Tester l'existence d'une clé dans la base de registre


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Mai 2020
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Mai 2020
    Messages : 35
    Par défaut Tester l'existence d'une clé dans la base de registre
    Bonjour à tous

    J’ai trouvé ces routines qui fonctionnent à merveille, mais ce n’est pas tout à fait ce que je cherche :

    Pour lire : Cette procédure serait à modifier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Uses Registry;
     
    procedure TForm1.Button1Click(Sender: TObject);
    Var Registre : TRegistry;
    begin 
    //Récupère l'url de la page de démarrage
    Registre:=TRegistry.Create; //Crée un objet TRegistry
    Registre.RootKey:=HKEY_CURRENT_USER; //Définit la clé principale
    Registre.OpenKey('\Software\Microsoft\Internet Explorer\Main',False); {"OpenKey" ouvre une clé particulière (False signifie que la clé n'est pas crée si elle n'existe pas} 
    Edit1.Text:=Registre.ReadString('Start Page'); //Renvoie un string à partir du nom de la valeur
    Registre.CloseKey; //Ferme la clé
    Registre.Free; //Détruit l'objet
    end;

    Pour écrire : Cette procédure me convient juste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Uses Registry;
     
    procedure TForm1.Button2Click(Sender: TObject);
    Var Registre : TRegistry;
    begin 
    //Modifie l'url de la page de démarrage
    Registre:=TRegistry.Create; //Crée un objet TRegistry
    Registre.RootKey:=HKEY_CURRENT_USER; //Définit la clé principale
    Registre.OpenKey('\Software\Microsoft\Internet Explorer\Main',False);
    {"OpenKey" ouvre une clé particulière (False signifie que la clé n'est pas crée si elle n'existe pas} 
    Registre.WriteString('Start Page',Edit1.Text); //Stocke le contenu de Edit1 dans "Start Page"
    Registre.CloseKey; //Ferme la clé
    Registre.Free; //Détruit l'objet
    end;
    Cela fonctionne bien, mais ce que je voudrais, c’est que dès que lance mon programme, on va vérifier si la clé existe.

    Oui, on récupère la valeur
    Non, on nous dirige vers la routine écrire.

    Donc, ce que je cherche, de ne pas passer par TForm1.Button1Click(Sender: TObject);

    J’ai vu qu’on peut utiliser KeyExists, mais je ne trouve pas la solution.

    Merci pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 569
    Billets dans le blog
    65
    Par défaut
    Bonjour et bienvenue,

    Citation Envoyé par zounar_j5 Voir le message
    on va vérifier si la clé existe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Uses Registry;
    
    procedure TForm1.Button1Click(Sender: TObject);
    Var Registre : TRegistry;
    begin 
    //Récupère l'url de la page de démarrage
    Registre:=TRegistry.Create; //Crée un objet TRegistry
    try
      Registre.RootKey:=HKEY_CURRENT_USER; //Définit la clé principale
      Registre.OpenKey('\Software\Microsoft\Internet Explorer\Main',True); // force la création si besoin
      if Registre.KeyExists('Start Page') 
        then Edit1.text:=Registre.ReadString('Start Page');
        else Registre.WriteString('Start Page',Edit1.Text); 
      Registre.CloseKey; //Ferme la clé
    finally
      Registre.Free; //Détruit l'objet
    end;
    end;
    dès que je lance mon programme,
    Là, on ne pourra que vérifier si la clé existe, pas forcément en enregistrer une puisque le edit1.text (sauf si vous en avez indiqué une valeur au design) risque d'être vide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Uses Registry;
     
    procedure TForm1.OnCreate(Sender: TObject);
    Var Registre : TRegistry;
    begin 
    //Récupère l'url de la page de démarrage
    Registre:=TRegistry.Create; //Crée un objet TRegistry
    try
      Registre.RootKey:=HKEY_CURRENT_USER; //Définit la clé principale
      Registre.OpenKey('\Software\Microsoft\Internet Explorer\Main',True); // force la création si besoin, normalement inutile 
      if Registre.KeyExists('Start Page') 
        then Edit1.text:=Registre.ReadString('Start Page');
        else begin 
           if Edit1.Text.isEmpty then Edit1.Text:='about:blank'; // page blanche  
           Registre.WriteString('Start Page',Edit1.Text);
       end; 
      Registre.CloseKey; //Ferme la clé
    finally
      Registre.Free; //Détruit l'objet
    end;
    end;

  3. #3
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Mai 2020
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Mai 2020
    Messages : 35
    Par défaut
    Hello,
    Merci, c'est à peu près ça, je me suis mal exprimé, en fait, ce que je cherche, c'est que dès qu'on lance le programme, on teste la clé, si elle existe, on continue le programme, autrement, on ouvre une boite de dialogue avec 2 options, la première, on crée la clé avec la routine procedure TForm1.Button2Click(Sender: TObject); et on poursuit le programme et la seconde, on quitte le programme. Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 569
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par zounar_j5 Voir le message
    c'est à peu près ça, je me suis mal exprimé
    Cahier des charges incomplet donne réponse inadaptée

    Sans tester, je partirai soit sur l'évènement onActivate (plutôt que le OnCreate) de la forme, soit sur les sources du projet

    on ouvre une boite de dialogue avec 2 options
    là encore deux options :
    • Utiliser InputQuery;
    • Utiliser une forme de son propre cru.


    Code écrit à la volée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Uses Registry,VCL.Dialogs;
    *
    procedure TForm1.OnActivate(Sender: TObject);
    Var Registre : TRegistry;
         Adresse : Array of String;
    begin 
    //Récupère l'url de la page de démarrage
    Registre:=TRegistry.Create; //Crée un objet TRegistry
    try
      Registre.RootKey:=HKEY_CURRENT_USER; //Définit la clé principale
      Registre.OpenKey('\Software\Microsoft\Internet Explorer\Main',True); // force la création si besoin, normalement inutile 
      if Registre.KeyExists('Start Page') 
        then Edit1.text:=Registre.ReadString('Start Page');
        else
          SetLength(Adresse,1); // initialisation taille 
          if  InputQuery('Page par défaut','Adress',Adresse) then // forme "ancienne" de InputQuery 
                begin  
                   if Adresse[0] then Adresse[0]:='about:blank'; // page blanche  
                   Registre.WriteString('Start Page',Adresse[0]);
                end
                else Close;
       end; 
      Registre.CloseKey; //Ferme la clé
    finally
      Registre.Free; //Détruit l'objet
    end;
    end;
    // forme nouvelle
    déclarer une fonction en private
    nécessite de remonter l'unité Registry en interface
    note : voir aussi [Edit]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    private 
       function EnregistrerCle(const values : array of String) : boolean;
     
    ....
     
    function tform1.EnregistrerCle(const values : array of string : boolean;
    Var Registre : TRegistry;
    begin
      if values[0].isEmpty then
        begin
          Showmessage('doit être différent de blanc');
          result:=false;
        end
      else begin
        Registre:=TRegistry.Create; //Crée un objet TRegistry
        try
          Registre.RootKey:=HKEY_CURRENT_USER; //Définit la clé principale
          Registre.OpenKey('\Software\Microsoft\Internet Explorer\Main',false);
          Registre.WriteString('Start Page',values[0]); 
          Registre.CloseKey; //Ferme la clé
        finally
          Registre.Free; //Détruit l'objet
        end;
      end;
    end;
     
    procedure TForm1.OnActivate(Sender: TObject);
    Var Registre : TRegistry;
         Adresse : Array of String;
    begin 
    //Récupère l'url de la page de démarrage
    Registre:=TRegistry.Create; //Crée un objet TRegistry
    try
      Registre.RootKey:=HKEY_CURRENT_USER; //Définit la clé principale
      Registre.OpenKey('\Software\Microsoft\Internet Explorer\Main',false);  
      if Registre.KeyExists('Start Page') 
        then Edit1.text:=Registre.ReadString('Start Page');
        else
          SetLength(Adresse,1); // initialisation taille 
          if  not InputQuery('Page par défaut','Adress',Adresse,EnergistrerCle) then Close; // forme "nouvelle" de InputQuery, 
       end; 
      Registre.CloseKey; //Ferme la clé
    finally
      Registre.Free; //Détruit l'objet
    end;
    end;
    [Edit] moins lisible, mais possible, sans déclarer de fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if not inputquery('page par défaut',['adresse'],R,
             function(const values : Array of String) : boolean
              begin
                  // code 
              end
              )
           then close;

    Seconde option : Écriture directement sur le projet, voici une ébauche, évitant donc d'utiliser le OnActivate d'une forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    uses
      Vcl.Forms, WinApi.Windows, System.Win.Registry, VCl.Dialogs,
      RUnit in 'RUnit.pas' {Form4};
     
    {$R *.res}
     
    var r : array of String;
        Registre : TRegistry;
    begin
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
      Registre :=TRegistry.Create;
      Registre.RootKey:=HKEY_CURRENT_USER; //Définit la clé principale
      Registre.OpenKey('\Software\Microsoft\Internet Explorer\Main',false); // force la création si besoin, normalement inutile
      if not Registre.KeyExists('Start Page') then
       begin
         SetLength(r,1);
         if not InputQuery('test',['valeur'],R) //todo : écrire fonction}
         then Application.Terminate
        end
       else begin
           Application.CreateForm(TForm4, Form4);
           Application.Run;
         end;
      ReportMemoryLeaksOnShutdown :=True;
    end.

  5. #5
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Mai 2020
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Mai 2020
    Messages : 35
    Par défaut
    Merci pour votre aide, je vais tester, je pense que ça va faire l'affaire. Merci.

  6. #6
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Mai 2020
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Mai 2020
    Messages : 35
    Par défaut Tester l'existence d'une clé dans la base de registre ( bis )
    Bonjour.
    Je reviens avec ma question de base de registre, merci à SergioMaster pour son aide mais après essai, ça fonctionne toujours pas.
    Je mets l'ébauche de mon code source avec des explications à l'intérieur pour comprendre ce que je cherche.
    JE vous remercie pour votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    unit Registre;
     
    interface
     
    uses
      Windows, Messages, Registry, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Lire: TButton;
        Ecrire: TButton;
        Quitter: TButton;
        Label1: TLabel;
        existe: TButton;
        procedure QuitterClick(Sender: TObject);
        procedure LireClick(Sender: TObject);
        procedure EcrireClick(Sender: TObject);
        procedure existeClick(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    const
    // clé du registre enregistrement et informations
      root = HKEY_CURRENT_USER;
      open = '\Zounar';
     
    implementation
     
    {$R *.dfm}
     
     
    procedure TForm1.existeClick(Sender: TObject);
     
    Var Registre : TRegistry;
    // nouveau = si c'est une première utilisation,valeur ID clé=nouveau
        nouveau : string;
       { cette routine s'evertue à enregistrer 'nouveau' dans ID clé alors
       que j'ai mis la valeur b+a de la routine Ecrire.
       je tourne en rond }
     
       { ce que je cherche en définitive, dès que je lance le programme, il execute la routine
         existe sans passer par un bouton }
    begin
        nouveau :='nouveau';
        Registre:=TRegistry.Create; //Crée un objet TRegistry
      try
        Registre.RootKey:=root; //Définit la clé principale
        Registre.OpenKey(open,true); // force la création si besoin
        if Registre.KeyExists('ID clé')
        // pour contrôler la valeur ID clé et me l'afficher
          then label1.caption:=Registre.ReadString('ID clé')
          else Registre.WriteString('ID clé',nouveau);
          label1.caption:=Registre.ReadString('ID clé');
          Registre.CloseKey; //Ferme la clé
      finally
      Registre.Free; //Détruit l'objet
     
     end;
    end;
    { Ce que je cherche,c'est que si c'est la pemière utilisation on enregistre
      nouveau dans ID clé et qu'aprèe, on m'envoye sur la routine Ecrire, autrement
      on lance le programme normalement en utilisant la valeur ID clé. }
      { Normalemenet, ID clé doit avoir une valeur du genre : 123456789  }
     
    procedure TForm1.LireClick(Sender: TObject);
     
    Var Registre : TRegistry;
        a : string;
    begin
      Registre:=TRegistry.Create; //Crée un objet TRegistry
      Registre.RootKey:=root; //Définit la clé principale
      Registre.OpenKey(open,False); {"OpenKey" ouvre une clé particulière (False signifie que la clé n'est pas crée si elle n'existe pas}
      label1.caption:=Registre.ReadString('ID clé'); //Renvoie un string à partir du nom de la valeur
      Registre.CloseKey; //Ferme la clé
      Registre.Free; //Détruit l'objet
    end;
     
    procedure TForm1.EcrireClick(Sender: TObject);
     
    Var Registre : TRegistry;
      a, b : string;
     
    begin
    // a et b sont lé juste pour faire le test
      b := 'abc-1234';
      a:= b+'-48';
      Registre:=TRegistry.Create; //Crée un objet TRegistry
      Registre.RootKey:=root; //Définit la clé principale
      Registre.OpenKey(open,True); {"OpenKey" ouvre une clé particulière (False signifie que la clé n'est pas crée si elle n'existe pas}
      Registre.WriteString('ID clé',a);
      Registre.CloseKey; //Ferme la clé
      Registre.Free; //Détruit l'objet
    end;
     
    procedure TForm1.QuitterClick(Sender: TObject);
    begin
      Close;
    end;
     
    end.

    Merci, j'espère avoir été assez clair dans ma demande.

  7. #7
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 982
    Par défaut
    Dommage d'avoir marqué la précédente discussion en résolue si ce n'était pas le cas

    Attention à vos nommages, Lire, Ecrire, Quitter, existe ... les verbes sont plus pour les méthodes pour les boutons mieux vaut préfixer soit btnLire, btnEcrire, btnQuitter, btnExiste


    Sinon, commencez par indenter votre code ... le if then else de existeClick fait énormément douter sur votre objectif, un oubli d'un begin end peut-être.
    respectez les try finally aussi un create finally free, un open finally close ... s'habituer à coder proprement ça vous aidra.

    et votre erreur est dans le titre de votre sujet "Tester l'existence d'une clé dans la base de registre" vous confondez une valeur et une clé !


    Attention, il y a une confusion entre KeyExists et ValueExists
    existeClick vérifie une clé 'ID clé' et tente lire une valeur nommé 'ID clé'
    EcrireClick et LireClick ne manipule que la valeur nommé 'ID clé'

    En ouvrant Regedit, vous auriez du voir que c'est une arborescence de clé dont chaque feuille contient des valeurs.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 569
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Dommage d'avoir marqué la précédente discussion en résolue si ce n'était pas le cas
    Une petite fusion de message et un non résolu : le tour est joué

  9. #9
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 982
    Par défaut
    Merci SergioMaster

    Donc depuis le début, la clé de la réponse c'était la valeur ... oui c'était facile

    Nom : Sans titre.jpg
Affichages : 605
Taille : 47,8 Ko

    Main est une clé
    Start Page est une valeur

    A partir de ce constat de vocabulaire, tout devient évident.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ...
      Registre.OpenKey('\Software\Microsoft\Internet Explorer\Main',True); // force la création si besoin, normalement inutile 
      if Registre.ValueExists('Start Page') then // Valeur !!!
        Edit1.text:=Registre.ReadString('Start Page');
      else
      begin
         // ne pas oublier la mention "Code écrit à la volée" cela indique un pseudo code à voir comme un algorithme, il manque des éléments syntaxiques pour le rendre fonctionnel, ne pas copier-coller sans l'étudier et le corriger.
      end;
     
    ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 569
    Billets dans le blog
    65
    Par défaut
    Ce que je cherche en définitive, dès que je lance le programme, il exécute la routine
    existe sans passer par un bouton
    Impossible de lancer une procédure de forme au lancement de l'application sans passer par les évènements de forme OnCreate ou OnActivate.
    C'est pour cela que je vous ai montré la solution en passant par le source du projet (seconde option de mon post #4, le code le plus en bas)

    Quant au code de votre procédure existe, j'ai un doute que d'autres devront confirmer, à savoir que : faire un Write d'une valeur n'est effective que lorsque que CloseKey est appliqué
    pour moi


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <s>   if Registre.KeyExists('ID clé')
        // pour contrôler la valeur ID clé et me l'afficher
          then label1.caption:=Registre.ReadString('ID clé')
          else Registre.WriteString('ID clé',nouveau);
    </s>  // Remplaçable par  
         if NOT Registre.KeyExists('ID clé') then 
             begin      
               Registre.WriteString('ID clé',nouveau);
    <s>       label1.caption:=Registre.ReadString('ID clé'); // renvoi l'ancienne clé ou ''
    </s> 
               Registre.CloseKey; //Ferme la clé  
               Registre.OpenKey(open,False);
            end;
          label1.caption:=Registre.ReadString('ID clé'); // Renvoi 'nouveau' si la clé a été créée
    de plus j'ai un doute sur l'obtention de la bonne base de registre en fonction du nombre de bits du programme et de l'OS

  11. #11
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Mai 2020
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Mai 2020
    Messages : 35
    Par défaut
    Super, merci, j'ai réussi, maintenant je vais me pancher sur l'execution au démarrage, je suis sur le bon chemin. Vous êtes sympa.
    Je laisse la discussion ouverte au cas où je devrais faire de nouveau appel sur ce sujet, pas faire la même boulette qu'avant. Merci à tous.

  12. #12
    Membre très actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Par défaut
    Petite correction dans le code de LireClick

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      Registre:=TRegistry.Create; //Crée un objet TRegistry
      Registre.RootKey:=root; //Définit la clé principale
      if Registre.OpenKey(open,False) then {"OpenKey" ouvre une clé particulière (False signifie que la clé n'est pas crée si elle n'existe pas}
      begin
        label1.caption:=Registre.ReadString('ID clé'); //Renvoie un string à partir du nom de la valeur
        Registre.CloseKey; //Ferme la clé
      end;        
      Registre.Free; //Détruit l'objet

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Vérifier l'existence d'une clef dans la base de registre
    Par CHARLI BONGO dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/05/2013, 17h49
  2. Tester l'existence d'une table dans un fichier lié
    Par Stargate SG1 dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/06/2009, 18h16
  3. tester l'existance d'une donnée dans une BDD
    Par rpg59 dans le forum C++
    Réponses: 4
    Dernier message: 28/05/2008, 09h30
  4. [MySQL] Tester l'existance d'une table dans une base de données
    Par méphistopheles dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 20/12/2006, 19h27
  5. Tester l'existence d'une colonne dans une table
    Par caps_corp dans le forum Access
    Réponses: 4
    Dernier message: 05/06/2006, 17h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo