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

Composants VCL Delphi Discussion :

Sauvegarder les contenus des Tedit avant la fermeture de l'application


Sujet :

Composants VCL Delphi

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 24
    Points : 6
    Points
    6
    Par défaut Sauvegarder les contenus des Tedit avant la fermeture de l'application
    Bonjour tout le monde,

    Je travaille sur une petite application sous Delphi XE. Une application qui utilise un nombre important de Tedit
    je veux savoir comment puis-je garder les valeurs que l'utilisateur doit saisir dans les Tedit et les TchechBox avant la fermeture , cette operation s'active s'il clique sur TmenuMain Enregistrer

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Important comment ?

    Le plus simple reste l'utilisation d'un ou plusieurs fichiers ini

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    utilisation Fichier ini Ta réponse est trop vaste, pour le nombre important de tedit c'est pas un problème, la solution est la même pour un seul ou plusieurs donc s'il te plait précise moi comment dois-je faire pour résoudre mon problème

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 875
    Points : 11 360
    Points
    11 360
    Billets dans le blog
    6
    Par défaut
    crée 2 sections dans un fichier ini : [Edit] et [Check]
    dans la section Edit, ajoute autant de clefs que de TEdit : clef=valeur
    où clef = nom du TEdit
    et valeur = Text de l'Edit
    fais de même pour les CheckBoxes

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Tu parcours ta liste de composants et tu sauves la paire cle (nom du composant) valeur (text/check) dans le fichier ini

    [edit]
    Grillé

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 71
    Points : 102
    Points
    102
    Par défaut
    Salut,
    Fichier ini ou en utilisant TFileStream,WriteComponent,ReadComponent...
    Avec un petit tableau de component par exemple...(pas tester)
    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
    //Enregistrement des composants
    procedure SaveTool(DirFile: string; Components: array of TComponent);
    var
      FileStream : TFileStream;
      I : Integer;
    begin
      FileStream:=TFileStream.Create(DirFile, fmCreate);
      try
        for I := Low(Components) to High(Components) do
          FileStream.WriteComponent(Components[I]);
      finally
        FileStream.Free;
      end;
    end;
    //Ouverture des composants
    procedure OpenTool(DirFile: string; Components: array of TComponent);
    var
      FileStream : TFileStream;
      I : Integer;
    begin
      FileStream:=TFileStream.Create(DirFile, fmOpenRead);
      try
        for I := Low(Components) to High(Components) do
          FileStream.ReadComponent(Components[I]);
      finally
        FileStream.Free;
      end;
    end;
    @+

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par nuxtay Voir le message
    Salut,
    Fichier ini ou en utilisant TFileStream,WriteComponent,ReadComponent...
    Avec un petit tableau de component par exemple...(pas tester)
    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
    //Enregistrement des composants
    procedure SaveTool(DirFile: string; Components: array of TComponent);
    var
      FileStream : TFileStream;
      I : Integer;
    begin
      FileStream:=TFileStream.Create(DirFile, fmCreate);
      try
        for I := Low(Components) to High(Components) do
          FileStream.WriteComponent(Components[I]);
      finally
        FileStream.Free;
      end;
    end;
    //Ouverture des composants
    procedure OpenTool(DirFile: string; Components: array of TComponent);
    var
      FileStream : TFileStream;
      I : Integer;
    begin
      FileStream:=TFileStream.Create(DirFile, fmOpenRead);
      try
        for I := Low(Components) to High(Components) do
          FileStream.ReadComponent(Components[I]);
      finally
        FileStream.Free;
      end;
    end;
    @+
    Et si on change l'ordre des composants c'est un gros risque de passer par ta méthode

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 71
    Points : 102
    Points
    102
    Par défaut
    Salut,
    Si on change l'ordre des composants ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SaveTool('C:\Utilisateur1',[Edit1,Edit2,CheckBox1]);
    Où y a-t-il des risques d'ordre, je ne comprend pas vraiment le problème...
    Le chargement ou la sauvegarde ce fait en fonction du name qui est fixe...
    @+

  9. #9
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par nuxtay Voir le message
    Salut,
    Si on change l'ordre des composants ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SaveTool('C:\Utilisateur1',[Edit1,Edit2,CheckBox1]);
    Où y a-t-il des risques d'ordre, je ne comprend pas vraiment le problème...
    Le chargement ou la sauvegarde ce fait en fonction du name qui est fixe...
    @+
    Vu qu'il indique qu'il a un nombre important de TEdit et Tcheckbox (pas 3 comme dans ton exemple)
    Je suppose qu'il sera obligé de faire une boucle sur la liste des composants.
    Le problème se trouvera lors de la récupération des données du FileStream, qui ne seront pas les informations du bon composants, car quand tu fais un couper/coller de composant, cela change l'ordre dans la liste de création et donc aussi l'ordre dans une boucle que la liste de composants.

    Donc je dis de faire attention à ta méthode qui peut comporter un rique.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup pour vos utiles et nombreuses réponses
    pouvez vous essayer de me faire une petite démonstration à travers un appel à vos procédure parce que je l'ai essayé pour deux Tedit mais ça n'a pas marché


    Merci

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 597
    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 597
    Points : 25 280
    Points
    25 280
    Par défaut
    Montre-nous plutôt ce que tu as déjà tenté, nous essayerons de voir où sont tes erreurs !
    tu ne comptes pas sur nous pour faire ton devoir !?

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    Bonjour
    D'abord je vous cite un exemple que je veux réaliser vous voyez ci-dessus le Tcheckbox de souvenir de moi


    je veux que si ce Tcheckbox est enfoncé les information saisies dans tedit 1 et 2 seront sauvegardées jusqu'à la prochaine ouverture de l'application
    voilà j'ai commence par définir la procédure dont vous m'avez communiqué comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //Enregistrement des composants
    procedure SaveTool(DirFile: string; Components: array of TComponent);
    var
      FileStream : TFileStream;
      I : Integer;
    begin
      FileStream:=TFileStream.Create(DirFile, fmCreate);
      try
        for I := Low(Components) to High(Components) do
          FileStream.WriteComponent(Components[I]);
      finally
        FileStream.Free;
      end;
    end;
    ensuite j'ai fais l'appel de la manière suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if Tcheckbox1.checked=true then
     SaveTool('C:\Utilisateur1',[Edit1,Edit2,CheckBox1]);
    Disant que j n'ai pas compris l'utilité de la deuxième procédure qu'est
    Ouverture des composants
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //Ouverture des composants
    procedure OpenTool(DirFile: string; Components: array of TComponent);
    var
      FileStream : TFileStream;
      I : Integer;
    begin
      FileStream:=TFileStream.Create(DirFile, fmOpenRead);
      try
        for I := Low(Components) to High(Components) do
          FileStream.ReadComponent(Components[I]);
      finally
        FileStream.Free;
      end;
    end;
    Expliquez moi doucement comment dois-je faire pour réaliser ce que je souhaite

    Merci

  13. #13
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 597
    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 597
    Points : 25 280
    Points
    25 280
    Par défaut
    OpenTool doit être utilisé dans le OnCreate de la Fiche pour relire le fichier écrit par SaveTool à la précédente exécution
    Tu dois lire son contenu systématiquement, sachant que la 1ere fois le fichier n'existe pas, il faut donc vérifier son existence avant !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Tcheckbox1.checked=true then
    Je suppose que le T est un mauvais copier coller
    sinon = true, ça se simplifie en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if CheckBox1.Checked then
    Ensuite, tu devrais renommer Edit1,Edit2,CheckBox1, en edUser, edPassWord, ckbRememberUser, c'est tout de même plus compréhensible
    D'ailleurs, c'est de la chance que Edit1,Edit2,CheckBox1 soit exactement les composants que tu as créé, nuxtay doit avoir une boule de cristal ?

    il serait bon d'ajouter un else qui supprime le fichier si la case est décochée

    Il est dommage d'utiliser du code sans le comprendre, le nom des fonctions OpenTool et SaveTool semble assez logique pourtant !

    Dommage que tu n'aies pas chercher à utiliser la solution avec un TIniFile qui est tout de même plus basique !

    Une recherche personnelle est plus intéressante que de pomper des fonctions utilisant des mécanismes très spécifique au langage Delphi, lorsque ton prof, te posera la question, seras-tu capable d'expliquer le contenu du fichier (un contenu binaire d'ailleurs) comme dans le sujet .dfm corrompu en XE

  14. #14
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    au lancement (OnCreate) tu regardes s'il existe un fichier C:\Utilisateur1 et tu le charges avec OpenTool() !

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 24
    Points : 6
    Points
    6
    Par défaut
    Dommage ! Vos réponses ne sont pas efficaces
    c'est vous qui a proposer ces procédures et vous me juger de les avoir utiliser
    vous parler beaucoup sans rien
    Si je suis ici c'est parce que je suis très faible en Delphi j'ai besoin de votre aide.
    ça s'appelle l'apprentissage par l'exemple !!
    vous êtes vraiment entrain de me décourager

    Bye Merci quand Même @+

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 71
    Points : 102
    Points
    102
    Par défaut
    Salut,
    @Rayek : Ok je vois où tu veux en venir avec mon exemple
    @ShaiLeTroll : non j'ai pas de boule de cristal, mais une bonne intuition, j'ai hésité
    donc si j'avais marqué un style de nom standard, il aurait peut-être pas compris...
    @Zodiak66 : le code que j'ai fourni été dans l'inspiration, mais vu ton niveau il vaudrait peut-être mieux passer par les fichiers ini !
    Tu as de l'aide ici FichierIni
    Fait un petit morceau de code avec les fichiers ini et nous pourrons te guider sur des solutions si tu as des problèmes.
    En gros ton fichier ini devrait ressembler à ça :
    [Utilisateur1]
    Edit2 = MotDePasse
    CheckBox1 = 1
    [Utilisateur2]
    ...
    Sache que personne ne te donnera de code complet, le morceau de code que j'ai fourni été un exemple, dont le but était de te fournir une nouvelle piste pour ton projet.
    Ensuite à toi de choisir la piste la plus adapter.
    Ah oui, pour info, SaveTool va à la fermeture de la fenêtre et OpenTool va à la création de la fenêtre, mais passe par les fichiers ini, qui sera beaucoup plus standard dans ton cas...
    Bon courage.
    @+

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 777
    Points : 13 405
    Points
    13 405
    Par défaut
    WriteComponent et ReadComponent ne sont pas du tout adaptés à ce type d'utilisation !

    WriteComponent sauvegarde toutes les propriétés différentes des valeurs par défaut : texte, mais aussi position, taille, etc. Retravailler la fiche devient totalement impossible puisque ces données seront systématiquement réinitialisées avec le contenu du fichier chargé

    @Zodiak66: J'attire juste ton attention sur l'intitulé du site : Developpez.com, Club des professionnels de l'informatique. Tu est bien sûr le bienvenu pour poser des questions et nous ferons notre possible pour y répondre. Rayek t'a donné immédiatement une réponse concrète. As-tu pris le temps de faire quelques recherches avant de répondre bizarrement : Ta réponse est trop vaste ? ou attends-tu simplement qu'on fasse ton boulot

    l'apprentissage par l'exemple
    La section Tutoriels est bourrées d'exemples. A toi de trouver ceux qui correspondent à tes besoins

Discussions similaires

  1. assembler les contenus des index listbox
    Par bailamos dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 06/07/2008, 00h03
  2. Sauvegarder les changements des valeurs datatable
    Par stephane92400 dans le forum JSF
    Réponses: 3
    Dernier message: 14/08/2007, 19h05
  3. récuperer les contenus des cellules pour un filtre
    Par k-eisti dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/07/2007, 06h18
  4. Les styles des éléments avant/après compilation
    Par Mysti¢ dans le forum wxPython
    Réponses: 2
    Dernier message: 14/06/2007, 17h07
  5. Le innerHTML de Mozilla ne prend pas les contenus des champs INPUT.value
    Par Ekimasu dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 22/05/2007, 15h56

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