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

Langage Delphi Discussion :

incompatibilité HKEY et String. pas trouvé l'erreur


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 36
    Par défaut incompatibilité HKEY et String. pas trouvé l'erreur
    Bonjour à tous,


    J'apprends Delphi en ce moment.
    J'ai écrit une fonction qui renvoie true ou false selon qu'une key de la base de registre est vide ou pas.
    Le compilateur m'indique une erreur HKEY et String pas compatible...

    J'ai cherché pendant des heures, mais je ne vois rien.
    Quelqu'un peut-il m'indiquer mon erreur?

    Merci pour vos aides.


    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
    function TForm1.KeyEmpty(Root,Key:string):boolean;
         var
          Val:TStrings;
         begin
          //créé la clef
          Reg:=TRegistry.Create;
          //définit la clef principale
          Reg.RootKey:=Root;
          //vérifie l'éxistance de la clef
          if Reg.OpenKey(Key, false) then
            //vérifie le contenu
            begin
              Reg.GetValueNames(Val);
              if Val.Count>0 then
                Result:=False;
            end
          else
            Result:=True;
            //ferme la clef
            Reg.CloseKey;
            //libère la variable
            Reg.Free;
          end;

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 489
    Par défaut
    salut

    RootKey est un dword
    par exemple
    utilise la constant HKEY_CURRENT_USER

    ton exemple deviendrai

    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
     
    uses Registry;
    ...
     
     
    function KeyEmpty(Root,Key:string):boolean;
    var
      _Val:TStrings;
      Reg: TRegistry;
    begin
      //créé la clef
     
      Reg:=TRegistry.Create;
      Reg.RootKey := HKEY_CURRENT_USER;//Root;//définit la clef principale
      //vérifie l'éxistance de la clef
      if Reg.OpenKey(Key, false) then   //vérifie le contenu
      begin
        Reg.GetValueNames(_Val);
        if _Val.Count>0 then
          Result:=False;
      end
      else
        Result:=True;
      Reg.CloseKey;//ferme la clef
      Reg.Free;//libère la variable
    end;
    @+ Phil

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 082
    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 : 14 082
    Par défaut
    Normal, Root c'est un identifiant numérique, un HKEY utilisé par les API Windows

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Reg.RootKey := HKEY_CURRENT_USER;
    Tu trouverais les constantes HKEY_* dans Windows.pas

    Cherché pendant des heures, pas au bon endroit, je me rappele de ma première expérience avec Delphi 4 et TRegistry, j'ai fait F1, j'ai copier-coller l'exemple ... a le bon vieux temps quand l'aide était bien faite !
    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

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 36
    Par défaut
    Merci pour vos réponses.
    Ca m'aide bien.
    En fait je voudrais que le KeyRoot puisse passer comme argument dans ma fonction. Il peut changer.

    Donc j'ai écrit cela du coup :

    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
    function TForm1.KeyEmpty(Root:Integer;Key:string):boolean;
          var
            Val:TStrings;
          begin
            Result:=True;
            //créé la clef
            Reg:=TRegistry.Create;
            //définit la clef principale
            Reg.RootKey:=Root;
            //vérifie l'éxistance de la clef
            if Reg.OpenKey(Key, false) then
              //vérifie le contenu
              begin
                Reg.GetValueNames(Val);
                if Val.Count>0 then
                  Result:=False;
                end;
            //ferme la clef
            Reg.CloseKey;
            //libère la variable
            Reg.Free;
          end;
    Je fais passer le HKEY dans une variable de type Integer.
    Mais je ne sais pas si c'est une bonne écriture...
    Vous feriez comment?
    Le compilateur m'écrit que cela peut dépasser les limites de sous-étendu...
    Je sens que ça va être compliqué.

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 489
    Par défaut
    salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function TForm1.KeyEmpty(Root:DWord;Key:string):boolean;
    @+ Phil

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 36
    Par défaut
    Je vous remercie pour votre aide.
    La déclaration DWord marche très bien.
    Il n'apparait pas en bleu comme string. J'imagine que Delphi ne doit pas le reconnaitre mais à la compile ça marche.
    Je vais pouvoir tester mon prog pour voir si déjà à ce niveau ça fonctionne.
    Merci à tous.

  7. #7
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 082
    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 : 14 082
    Par défaut
    Le type HKEY existe aussi !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function TForm1.KeyEmpty(Root: HKEY; const Key: string):boolean;
    C'est le type de la propriété RootKey, autant être conforme

    le type n'apparaisse pas en bleu, seul la string qui est un type spécial est considéré comme un mot clé, selon la version de Delphi, cela signifie des choses différentes :
    Pour D3 à D2007
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function TForm1.KeyEmpty(Root: HKEY; const Key: AnsiString):boolean;
    Pour D2009
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function TForm1.KeyEmpty(Root: HKEY; const Key: UnicodeString):boolean;
    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

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

Discussions similaires

  1. [Débutant] j'ai pas trouvé l'erreur
    Par faycal-king dans le forum MATLAB
    Réponses: 4
    Dernier message: 29/05/2015, 09h39
  2. Je n'ai pas trouvé l'erreur
    Par bronsoe dans le forum Débuter
    Réponses: 5
    Dernier message: 01/09/2011, 15h40
  3. Réponses: 2
    Dernier message: 15/03/2005, 14h24
  4. Réponses: 12
    Dernier message: 02/02/2004, 13h41
  5. Ne pas formater une erreur
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 2
    Dernier message: 18/03/2003, 14h13

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