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 :

Fichiers ini et TListview


Sujet :

Langage Delphi

  1. #1
    Membre du Club Avatar de ddubois
    Profil pro
    Inscrit en
    Février 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 111
    Points : 47
    Points
    47
    Par défaut Fichiers ini et TListview
    Je cherche a lire le contenu d'un Fichier ini (en global avec FileIni.ReadSections et FileIni.ReadSectionValues) et à créer des icones dans un TListview avec les éléments contenu dans mon fichier ini. Le but etant d'executer Un ShellExecute (sur le PATH et eventuellement le Parametre s'il existe) en double cliquant sur les icones du TListview.

    Est-ce que ma boucle vous parait convenable ? (en fait, je tatonne par essai successifs), je m'approche mais c'est pas terrible...

    D'autre part, ListItem.Caption := Valeurs.Strings [0];
    renvoie toute la chaine : "clé = valeur" de la section alors que juste la valeur m'interresse (ex : "Mon Dossier", "Mon planning"), Strings [0];
    ne semble pas être la bonne commande...

    Le fichier ini est structuré ainsi :

    [1]
    NAME = "Mon Dossier"
    SUBTITLE = "Affiche le contenu de votre dossier personnel"
    PATH = c:/windows/system32/calc.exe //pour l'exemple
    PARAM =
    ICON = 1

    [2]
    NAME = "Mon Planning"
    SUBTITLE = "Affiche le contenu du planning"
    PATH = c:/windows/system32/cmd.exe
    PARAM =
    ICON = 2
    etc...

    Mon code est le suivant :

    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
     
    var
     FileIni  : TIniFile;
     Compteur : Integer;
     Section  : TStringList;   //Liste des sections du fichier ini
     Valeurs  : TStringList;   //Liste les clés et les valeurs
     ListItem : TListItem;
     i        : Integer;
     
    begin
       try
         begin
          FileIni:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'\QF.ini');
     
           Section:=TStringList.Create;
           Valeurs:=TStringList.Create;
     
          // Lit les noms de toutes les sections d'un fichier INI
          FileIni.ReadSections(Section);
     
          For Compteur:=0 to Section.Count-1 do
            begin
     
              with ListView1 do
              ListItem := Items.Add;        //Ajoute un Item pour chaque Section
     
              //lit les clés et les valeurs de toutes les clés d'une section particulière d'un fichier INI
               FileIni.ReadSectionValues(Section[Compteur],Valeurs);
     
             for i:=0 to Valeurs.Count-1 do
                 ListItem.Caption := Valeurs.Strings [0];               //Titre des Items
               //ListItem.SubItems.Add(Valeurs.Strings[1]);        
            end;
         end;
      finally
        FileIni.Free ;
        Section.Free;
        Valeurs.Free;
       end;
    end;
    Merci de vos suggestions,

    Denis

  2. #2
    Membre du Club Avatar de ddubois
    Profil pro
    Inscrit en
    Février 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 111
    Points : 47
    Points
    47
    Par défaut re:
    J'ai trouvé une partie de la réponse:

    ListItem.Caption := Valeurs.Values['NAME'];

    ListItem.SubItems.Add(Valeurs.Values['SUBTITLE']);

    etc.

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 522
    Points : 25 052
    Points
    25 052
    Par défaut
    Pense qu'il existe aussi une propriété Data au ListItem si tu souhaite stocker un pointeur (sur un record) qui contiendrait des données cachées comme le Path

    Je n'utiliserais pas ReadSectionValues, mais plutôt ReadString ou ReadInteger sur chaque clé NAME, SUBTITLE, PARAM, ICON...

    Petite remarque sur le "create try finally free"
    Dans ton code, là, si tu as une exception dans le constructeur, tu peux tenter de libérer des objets non initialisés ! je n'arrive pas à comprendre pourquoi tant de monde veut écrire "try create finally free" au lieu de "create try finally free" ou un paranoïaque "try create try finally free except" (surtout utile si l'on souhaite se protéger d'un EOutOfMemory ou de constructeur pouvant déclencher des exceptions, ce qui est assez rare)
    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
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 667
    Points : 7 002
    Points
    7 002
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Petite remarque sur le "create try finally free"
    Dans ton code, là, si tu as une exception dans le constructeur, tu peux tenter de libérer des objets non initialisés ! je n'arrive pas à comprendre pourquoi tant de monde veut écrire "try create finally free" au lieu de "create try finally free" ou un paranoïaque "try create try finally free except" (surtout utile si l'on souhaite se protéger d'un EOutOfMemory ou de constructeur pouvant déclencher des exceptions, ce qui est assez rare)
    +1
    Tu n'es pas le seul.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  5. #5
    Membre du Club Avatar de ddubois
    Profil pro
    Inscrit en
    Février 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 111
    Points : 47
    Points
    47
    Par défaut
    Merci, effectivement je pensais utiliser un record sur le Data du TListItem
    avec 2 ou 3 infos notamment le path (pour executer le programme lors du doubleclick via un shellExecute) ainsi que le paramètre PARAM (2e paramètre de ShellExecute)

    Cellui qui as un bout de code pour le Record et le ListItem.Data, je suis preneur...

    Encore merci, je vais voir pour les try, fianlly, free, bidule truc

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 522
    Points : 25 052
    Points
    25 052
    Par défaut
    Cela ressemble à cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    type 
      PInfos = ^TInfos;
      TInfos = record
        nom : String;
        prenom : String;
        adr : String; 
      end;
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var
      Infos: PInfos;
    begin
      New(Infos); // ne pas oublier le Dispose lors du Clear ou Delete dans le TListView
      ListItem.Data = Infos;
    un code similaire avec le TTreeView qui fonctionne pour la propriété Data exactement de la même façon
    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

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 743
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 743
    Points : 13 299
    Points
    13 299
    Par défaut
    En voyant que les noms de sections sont numériques, il serait aussi possible de ne stocker que ce nombre dans Data :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //Ecriture
    Data := Pointer(Compteur +1);
     
    //Lecture
    FileIni.ReadString(IntToStr(integer(Data)), 'NAME', '');

  8. #8
    Membre du Club Avatar de ddubois
    Profil pro
    Inscrit en
    Février 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 111
    Points : 47
    Points
    47
    Par défaut
    J'ai intégré toutes vos suggestions de code.
    Mais j'ai une Exception lors ce que je double-clique sur un TlistItem, sur la Commande :

    ShowMessage(Infos^.FPath);
    (mais peut-être est-ce la syntaxe qui n'est pas adaptée ?)

    Qui devrait afficher le chemin affecté pour executio, dans un ShellExecute.

    Donc je poste le code (provisoire) complet (en 3 parties) :

    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
     
    { Stocke un pointeur sur un Record dans les TListItem }
    type
      PInfos = ^TInfos;
      TInfos = record
        FType  : Integer;
        FName  : String;
        FTitle : String;
        FPath  : String;
        FParam : String;
        FIcon  : Integer;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
    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
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
     FileIni  : TIniFile;
     Compteur : Integer;
     Section  : TStringList;   //Liste des sections du fichier ini
     Valeurs  : TStringList;   //Liste les clés et de leurs valeurs
     ListItem : TListItem;
     Infos    : Pinfos;        //Pointeur sur le 'Record'
     i        : Integer;
     
     
    begin
     
      FileIni:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'\QF.ini'); // Ouvre ou crée le fichier
      Section:=TStringList.Create;
      Valeurs:=TStringList.Create;
      Try
        begin
          // Lit les noms de toutes les sections d'un fichier INI
          FileIni.ReadSections(Section);
     
          Screen.Cursor := crHourglass;
          ListView1.Items.BeginUpdate;
     
          For Compteur:=0 to Section.Count-1 do
            begin
              // Lecture des noms des [sections] du fichier ini :
               //ShowMessage(Section[Compteur]);
     
              with ListView1 do
              ListItem := Items.Add;         //Ajoute un Item pour chaque Section
     
              New(Infos);                         //Nouveau pointeur
              ListItem.Data := Infos;        
     
              //lit les clés et les valeurs de toutes les clés d'une section particulière d'un fichier INI
              //FileIni.ReadSectionValues(Section[Compteur],Memo1.Lines);
              FileIni.ReadSectionValues(Section[Compteur],Valeurs);
     
             for i:=0 to Valeurs.Count-1 do
     
               {Nom du module}
               ListItem.Caption := Valeurs.Values['NAME'];
               Infos^.FName := Valeurs.Values['NAME'];
     
              {Commentaire -  Col 1}
               ListItem.SubItems.Add(Valeurs.Values['SUBTITLE']);
               Infos^.FTitle := Valeurs.Values['SUBTITLE'];
     
               Infos^.FPath := Valeurs.Values['PATH'];
               Infos^.FParam := Valeurs.Values['PARAM'];
     
     
              {Icone du module}
              // if Valeurs.Values['ICON'] <> "" then     { Si présence d'autres Sections sans 'ICON' dans le Ini }
               ListItem.ImageIndex := (StrToInt(Valeurs.Values['ICON'])-1);
               Infos^.FIcon := (StrToInt(Valeurs.Values['ICON'])-1);
     
            end;
         end;
      Finally
        FileIni.Free ;
        Section.Free;
        Valeurs.Free;
        ListView1.Items.EndUpdate;
        Screen.Cursor := crDefault
      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
    17
     
    procedure TForm1.ListView1DblClick(Sender: TObject);
    var
      ListItem : TListItem;
      Infos    : Pinfos;       //Pointeur sur le 'Record'
     
    begin
      ListItem := ListView1.Selected;
     
      {Aucune icône n'est sélectionnée :}
      if not assigned(ListItem) then exit;
     
      ShowMessage(Infos^.FPath);  <-------------- EXCEPTION VIOLATION
     
     //Dispose(Infos);           //Libère l'espace mémoire allouée
     
    end;
    Merci,

    Denis

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 522
    Points : 25 052
    Points
    25 052
    Par défaut
    en même temps, c'est pas magique ! Data tu l'as oublié ? Comprends-tu ce que tu fais ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      {Aucune icône n'est sélectionnée :}
      if not assigned(ListItem) then exit;
     
      Infos := Pinfos(ListItem.Data); // je ne sais plus si le cast est obligatoire
      ShowMessage(Infos^.FPath);  
     
     //Dispose(Infos);       Surout pas ici !
    le Dispose devra être fait en boucle sur chaque Pinfos contenu dans les ListItem.Data, ne pas oublier de cast le pointeur pour le Dispose pour appeler la fonction FinalizeRecord qui s'occupera de libérer les sous-pointeur comme le type String !

    la boucle devra être dans FormDestroy
    ça devrait donner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i:=0 to ListView1.Items.Count-1 do
      Dispose(PInfos(ListView1.Items[I].Data)); 
    ListView1.Items.Clear();
    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
    Membre du Club Avatar de ddubois
    Profil pro
    Inscrit en
    Février 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 111
    Points : 47
    Points
    47
    Par défaut
    Mais c'est bien sur !
    Je reprends Delphi après 2 ans d'absence ! (dur, dur)

    Merci grand Troll, ca marche au poil !

    Il me reste a afficher la même chose avec un filtre par "TYPE" (numérique) en cliquant sur un bouton :
    Bouton 1 : Tous les items (C'est Fait)
    Bouton 2 : Les items de "Type" 1 (voir .ini)
    Bouton 3 : Les items de "Type" 2
    etc.

    Comment feriez vous ?
    Est-ce que je peut m'appuyer (capitaliser) sur une partie du code présent ou dois je refaire toute la lecture du ini, vider les Data avec Dispose puis ré-affecter chaque Champs PInfos en ecartant les "TYPE" différents, etc.
    Le tout dans un procedure avec le numéro du "TYPE" (Integer) passé en Paramètre (en fonction du bouton appuyé) ?

    Merci,

    Denis

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 522
    Points : 25 052
    Points
    25 052
    Par défaut
    Tu peux effectivement ressortir le code du FormCreate vers une fonction plus ouverte avec paramètres !

    Même, je ferais en deux temps !
    Une fonction qui lit le fichier ini et rempli une TList passé en paramètre
    Puis une fonction qui utilise la TList pour affecter les Data !
    une fois les Data affecté, la TList peut être libéré (cela ne libère pas les pointeurs automatiquement donc pas de soucis)

    Ainsi la fonction de lecture du ini pourra être réutiliser ailleurs !
    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

  12. #12
    Membre du Club Avatar de ddubois
    Profil pro
    Inscrit en
    Février 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 111
    Points : 47
    Points
    47
    Par défaut
    Bon, je vais essayer de traduire tout cela en langage Delphinien !

    Merci,

    Denis

  13. #13
    Membre du Club Avatar de ddubois
    Profil pro
    Inscrit en
    Février 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 111
    Points : 47
    Points
    47
    Par défaut
    En cliquant droit sur un Tlistitem, j'affiche une boite de dialogue et je remplit les champs àTEdit l'ouverture à partir des TListItem.Data du Tlisview de Form1
    Finalement je retombe sur un bête message d'erreur : "Identificateur non déclaré : 'TListItem'" dans Form2, et je me bagarre, impossible de trouver la soluce (je sens que je vais être tout rouge de honte ) mais a force d'être dans le guidon...

    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
     
     
    var
      Form2: TForm2;
     
    implementation
     
    uses Unit1;  //Réference à TForm1
     
    {$R *.dfm}
     
    procedure TForm2.FormShow(Sender: TObject);
    var
      ListItem : TListItem;
      Infos    : Pinfos;                  //Pointeur sur le 'Record'
    begin
      ListItem := Form1.ListView1.Selected;     //L'item concerné est celui sélectionné
     
      Infos := Pinfos(Form1.ListView1.ListItem.Data);
     
      EditName.Text := Infos^.FName;
      EditSubTitle.Text := Infos^.FTitle;
      EditPath.Text := Infos^.FPath;
      EditParam.Text := Infos^.FParam;
    end;
    D'avance, merci

    Dan

  14. #14
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 667
    Points : 7 002
    Points
    7 002
    Par défaut
    Citation Envoyé par ddubois Voir le message
    Finalement je retombe sur un bête message d'erreur : "Identificateur non déclaré : 'TListItem'" dans Form2, et je me bagarre, impossible de trouver la soluce
    L'aide dit qu'il faut ComCtrls dans les uses.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  15. #15
    Membre du Club Avatar de ddubois
    Profil pro
    Inscrit en
    Février 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 111
    Points : 47
    Points
    47
    Par défaut
    oui ca marche, je vous remercie.

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

Discussions similaires

  1. Sauvegarde des attributs de texte en fichier ini
    Par Raylemon dans le forum Langage
    Réponses: 2
    Dernier message: 06/09/2003, 21h28
  2. Lecture et ecriture fichier .ini
    Par despe dans le forum C
    Réponses: 6
    Dernier message: 23/07/2003, 20h40
  3. Fichiers INI et TlistBox
    Par Philippe01 dans le forum Langage
    Réponses: 3
    Dernier message: 11/06/2003, 15h36
  4. [VB6] Api pour supprimer dans un fichier INI
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 20/02/2003, 08h16
  5. faire un fichier .ini
    Par florent dans le forum C++Builder
    Réponses: 14
    Dernier message: 31/05/2002, 22h06

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