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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé 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
    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.

  2. #2
    Membre confirmé 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
    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

  3. #3
    Membre Expert

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    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.

  4. #4
    Membre confirmé 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
    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').

  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 : 39
    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
    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 confirmé 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
    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 ?

+ 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