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 :

Fichier INI : Récupérer une valeur en connaissant le nom de la clé


Sujet :

Langage Delphi

  1. #1
    Membre du Club Avatar de bionicleman
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Points : 66
    Points
    66
    Par défaut Fichier INI : Récupérer une valeur en connaissant le nom de la clé
    Bonsoir,
    J'aurais besoin d'un petit coup de pouce pour mon application.
    En gros je crée plusieurs objets d'un popupmenu, ceux-ci sont sauvegardés dans un fichier INI que je charge au lancement de l'application afin de recréer les objets précédemment ajoutés. Jusque là, aucun problème.
    Là où mon soucis se pose c'est au moment de l'affectation de l'évènement "OnClick" des objets.
    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure AjouterUnItem(PopupMenu:TMenuItem;FichierIniACharger,Section,Cle,default:String);
    begin
      MenuItem:=TMenuItem.Create(PopupMenu);
      MenuItem.Caption:=INI.ReadString(Section,Cle,default);
      MenuItem.OnClick := Form5.AjoutClic;
      MenuItem.Name:=nomitem;
      PopupMenu.Add(menuItem);
    end;
    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
    Procedure TForm5.AjoutClic(Sender: TObject);
    var
      nom: string;
    Begin
      //RECHERCHE DANS LE INI DE LA CLE 'chemin', RECUPERER LA VALEUR
      chemin:= //???
      form2.ListBox1.Items.Clear;
      If FindFirst(chemin+'*.*',faAnyFile,Info)=0 Then
      Begin
        Repeat
          If (Info.Attr And faDirectory)=0
            Then form2.ListBox1.Items.Add(Info.FindData.cFileName);  //affichage des fichier
        Until FindNext(Info)<>0;
      FindClose(Info);
      End;
    End;
    Comme vous l'avez compris, l'évènement OnClick scrute un dossier donné et en affiche les fichier dans un listbox.
    Tout celà se fait sans soucis. En fait je voudrais avoir un évènement différent pour chaque objet : mon fichier INI sauve en plus du 'caption' de l'objet créé le dossier vers lequel il doit pointer. J'avais penser à récupérer la valeur correspondante au caption de l'objet cliqué avec par exemple ReadSection mais je rame...

    Voilà. Si vous avez une idée ou une suggestion, elle est la bienvenue =D
    Merci d'avance.
    La source de la majorité des bugs sur Windows se situe entre le clavier et la chaise...

  2. #2
    Membre du Club Avatar de bionicleman
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Re,
    J'ai un peu planché et j'ai penché pour une solution qui m'a l'air plus simple mais qui me pose quand même un problème :

    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
    Procedure TForm5.AjoutClic(Sender: TObject);
    var
      nom: string;
      obj: string;
    Begin
      obj:=;//Je récupere le caption de l'objet cliqué
      nom:=Ini.ReadString('Item', obj,'C:\'); // je charge la valeur grâce a la ligne précédente
      //RECHERCHE DANS LE INI DE LA CLE 'chemin', RECUPERER LA VALEUR
      //Le reste ne change pas.
      chemin:=Ini.ReadString('Item', nom, 'C:\' );
      form2.ListBox1.Items.Clear;
      If FindFirst(chemin+'*.*',faAnyFile,Info)=0 Then
      Begin
        Repeat
          If (Info.Attr And faDirectory)=0
            Then form2.ListBox1.Items.Add(Info.FindData.cFileName);  //affichage des fichier
        Until FindNext(Info)<>0;
      FindClose(Info);
      End;
    End;
    Voilà. Je bloque sur la récupération du caption de l'objet cliqué.
    Je viens d'y penser, et je continue mes recherches

    Si quelqu'un a une idée je suis prenneur
    La source de la majorité des bugs sur Windows se situe entre le clavier et la chaise...

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Tu dois travailler avec le Sender qui est passé en paramètre du OnClic, c'est fait pour ça En castant le Sender en tant que TMenuItem tu pourras alors accéder à sa propriété Caption.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  4. #4
    Membre du Club Avatar de bionicleman
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Bonjour Bonjour,
    après un peu de recherche et de lecture dans la FAQ http://delphi.developpez.com/faq/?pa...evenementcompo
    voilà que j'ai trouvé la solution à mon problème :
    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
    Procedure TForm5.AjoutClic(Sender: TObject);
    var
      nom: string;
      chemin: string;
    Begin
      //RECHERCHE DANS LE INI DE LA CLE 'chemin', RECUPERER LA VALEUR
      ini:=TIniFile.Create('F:\Documents de r3\Divers\Programmes\Dossiers\Lanceur\Menu.ini');
      nom:=TmenuItem(sender).Caption;
      form2.ListBox1.Items.Clear;
      chemin:=ini.ReadString('Items',nom,'C:\');
      //showmessage('chemin : '+chemin); je teste le chemin mais ce n'est pas le même que dans le fichier INI, pourtant la variable 'nom' a la bonne valeur =X
      If FindFirst(chemin+'*.*',faAnyFile,Info)=0 Then
      Begin
        Repeat
          If (Info.Attr And faDirectory)=0
            Then form2.ListBox1.Items.Add(Info.FindData.cFileName);  //affichage des fichier
        Until FindNext(Info)<>0;
      FindClose(Info);
      End;
      ini.Free;
    End;
    Voilà voilà, me reste juste un problème à régler (la variable 'chemin').
    La source de la majorité des bugs sur Windows se situe entre le clavier et la chaise...

  5. #5
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Donc si je comprends bien, ton soucis est que que la valeur de la variable chemin n'est pas celle lu dans le fichier ini ?
    Tu dois avec quoi comme chemin ?
    Tu obtiens quoi à la place ?

  6. #6
    Membre du Club Avatar de bionicleman
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Salut,
    Tu as tout à fait bien compris mon problème.
    La variable contient toujours la valeur par défaut (F:\) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chemin:=ini.ReadString('Items', nom, 'F:\');
    Alors que dans mon fichier INI voilà ce qu'il y a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [Item]
    disque D=D:\
    test1=C:\
    La variable chemin devrait alors contenir, soit 'D:\', soit 'C:\'.
    bizarre non ? Pourtant, il me semble que ma ligne d'affectation est juste ?
    La source de la majorité des bugs sur Windows se situe entre le clavier et la chaise...

  7. #7
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    Citation Envoyé par bionicleman Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chemin:=ini.ReadString('Items', nom, 'F:\');
    Alors que dans mon fichier INI voilà ce qu'il y a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [Item]
    disque D=D:\
    test1=C:\
    petite remarque : tu lis la section Items alors que dans ton fichier INI c'est Item

  8. #8
    Membre du Club Avatar de bionicleman
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    OMG !

    Heureusement que des génies comme toi existent

    Mais malheureusement, même après correction, j'ai toujours le même problème...
    La source de la majorité des bugs sur Windows se situe entre le clavier et la chaise...

  9. #9
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Donc cela provient de la variable nom ...
    Quelle est sa valeur ... Logiquement ça doit être soit disque D soit test1?

  10. #10
    Membre du Club Avatar de bionicleman
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Re,
    non non, je ne pense pas que cela vienne de la variable 'nom', car lorsque je la teste (showmessage(nom);) elle me retourne soit la valeur disque D soit test1.
    PS : cette valeur correspond à l'objet cliqué
    La source de la majorité des bugs sur Windows se situe entre le clavier et la chaise...

  11. #11
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Citation Envoyé par bionicleman Voir le message
    Re,
    non non, je ne pense pas que cela vienne de la variable 'nom', car lorsque je la teste (showmessage(nom);) elle me retourne soit la valeur disque D soit test1.
    PS : cette valeur correspond à l'objet cliqué
    Bon, d'après mes tests (oui, j'ai fini par testé ton code), il semblerait que c'est à cause du caractère de soulignement lorsque l'on clique dessus... donc la question est la suivante :

    As-tu la propriété AutoHotKeys de ton MainMenu à maManual ?

  12. #12
    Membre du Club Avatar de bionicleman
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Points : 66
    Points
    66
    Par défaut
    Yeah ! J'viens de tester ça et, effectivement ma propriété AutoHotKey était sur maAutomatic, je l'ai mise à maManual et ça marche =D

    Merci à toi pour cet aide !
    La source de la majorité des bugs sur Windows se situe entre le clavier et la chaise...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/03/2012, 09h11
  2. Réponses: 6
    Dernier message: 02/04/2008, 16h32
  3. Réponses: 0
    Dernier message: 25/02/2008, 14h23
  4. récupérer une valeur dans un fichier .txt ?
    Par _n1n1_ dans le forum VB.NET
    Réponses: 5
    Dernier message: 27/04/2007, 19h19
  5. [XSL]récupérer une valeur de plusieurs fichiers XML
    Par snoop dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 05/02/2006, 00h32

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