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

 Delphi Discussion :

mémoriser l'item d'un combobox.


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 34
    Par défaut mémoriser l'item d'un combobox.
    Bonjour,

    je voudrais pouvoir mémoriser l'état d'un combobox afin que lorsque je relance mon application l'item actif du combobox soit celui qui été actif à la fermeture de l'application.

    A savoir j'ai déjà écris la procédure qui sauvegarde la liste des items avec la ligne suivante:

    combobox1.Items.SaveToFile('C:\dossier\fichier.txt')
    existe t'il une propriété du combobox qui fait ça ou dois-je créer un fichier séquentiel pour enregistrer un record?
    et si la piste du record et à retenir dois-je enregistrer le .text ou .itemindex ?

    Amicalement,
    Ytech

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    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 086
    Par défaut
    Text si la Saisie est libre
    ItemIndex si l'on ne peut que choisir un Item (Style à csDropDownList par exemple)
    Sinon pour le stockage, tu peux essayer le Fichier Ini, la Base de Registre, ou un fichier XML ou encore un Binaire (avec ton fameux record) ... à savoir qu'avec Vista, les 2ere solutions sont de plus en plus chiantes ...

    Tu as ce genre de code un peu partout sur le forum, un petite recherche et tu trouveras ton bonheur ...
    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

  3. #3
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut


    Pou cette utilisation, peut-être de faire "remonter" en ItemIndex l'item ainsi cliqué, voir source pour t'en donner le principe :
    http://delphi.developpez.com/sources...ontrolComboBox

    Mais faut pas que ta Combo "trie" par ordre alpha

    @+

    Edit : grillé par notre ShaiLeTroll

  4. #4
    Membre émérite
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    991
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 991
    Par défaut
    Tu peux l'enregistrer dans un fichier ini
    Si tu utilises la jvcl il te suffit de déposer deux composantes de la palette TJvFormStorage et TJvAppIniFileStorage

    Moi je m'en sers pour sauvegarder le contenu des combobox items et itemindex

    tu doubles clic sur l'icône de TJvFormStorage pour choisir simplement ce que tu veux enregistrer

    Edit: grillé aussi

  5. #5
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 34
    Par défaut
    Bon en fait j'ai utiliser un bout de code que j'avais déjà écris en m'inspirant du cours de Mr Beaulieu sur l'écriture et la lecture d'un fichier séquentiel en utilisant un record.
    http://fbeaulieu.developpez.com/guid...age_13#LXIII-C

    cela fonctionne mais comme j'ai 22 combobox à traiter c'est un peux fastidieux!
    c'est pourquoi je me demande s'il n'est pas possible que creer une boucle.
    je m'explique :
    je nomme mes combobox
    cbox1
    cbox2
    cbox..
    cbox22

    est t'il possible de creer une boucle incrementant une variable n
    et de traiter mes combobox dans la boucle en utilisant le nom cboxn ?

    L'idée de trier les items dans un ordre alphabétique m'intéresse pouvez-vous m'en dire plus?

    Amicalement,

    Ytech

  6. #6
    Expert confirmé

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Par défaut
    Citation Envoyé par Ytech123 Voir le message
    est t'il possible de creer une boucle incrementant une variable n
    et de traiter mes combobox dans la boucle en utilisant le nom cboxn ?
    http://delphi.developpez.com/faq/?pa...#findcomponent
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  7. #7
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    L'idée de trier les items dans un ordre alphabétique m'intéresse pouvez-vous m'en dire plus?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox1.Sorted := true;

  8. #8
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 34
    Par défaut
    Merci à tous pour vos conseil j'ai maintenant suffisamment d'infos pour finir cette applications.

  9. #9
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Janvier 2019
    Messages : 219
    Par défaut
    Bonjour à tous,
    Je réveille cette vieille discussion pour le même problème.
    J'ai une Combobox que j'utilise pour stocker des adresses de sites internet. Il y a donc 2 valeurs : le nom du site et le lien du site. Pour ajouter des entrées à la Combobox pas de problèmes. Je cherche ensuite à mémoriser les données (FormClose ou Destroy) de cette Combobox pour les récupérer (FormCreate) à chaque appel de l'appli. Tout cela par un fichier INI.
    Question : l'un d'entre vous connaît-t-il le fonctionnement complet des composants JVCL cités dans la discussion, à savoir TJvFormStorage et TJvAppIniFileStorage. J'ai bien réussi à mémoriser et à rappeler 1 valeur mais pas la 2ème.
    Ou bien y-a-t-il d'autres solutions pour mémoriser les 2 valeurs et les restituer ?
    Merci. Cordialement

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 593
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par f5jcg_Lulu Voir le message
    Ou bien y-a-t-il d'autres solutions pour mémoriser les 2 valeurs et les restituer ?
    Il y a un paquet de solutions différentes


    Si tu reste sur un fichier ini.

    voici déjà une piste : charger les valeurs dans un tstringlist (public ou privé) de la forme
    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
    uses System.Inifiles, System.ioutils;
     
    procedure TForm2.Button1Click(Sender: TObject);
    var f : TInifile;
    begin
      Sl.Clear;
      Sl.NameValueSeparator:='=';
      F:=TInifile.Create(Tpath.Combine(Tpath.GetAppPath,'test.ini'));
      try
        F.ReadSectionValues('Combo',sl);
        for var i:=0 to sl.count-1
           do Combobox1.Items.Add(sl.names[i]);
      finally
       F.Free;
      end;
      combobox1.ItemIndex:=0;
    end;
     
    procedure TForm2.ComboBox1Select(Sender: TObject);
    begin
    label1.Caption:=sl.ValueFromIndex[combobox1.ItemIndex];  // montre la valeur de l'item
    end;
     
    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    sl.Free; // ne pas oublier de supprimer
    end;
     
    procedure TForm2.FormCreate(Sender: TObject);
    begin
    sl:=TStringList.Create;
    {à toi de customiser en fonction de tes besoins}
    //sl.OwnsObjects:=true
    //sl:=TStringlist.Create(TDuplicates.dupAccept,false,false);  {à choisir si on ne veux pas de duplicata, si on veut que la liste soit triée, si on veut que la liste soit sensible à la casse}
    sl.NameValueSeparator:='=';
    end;

    Il y a bien sûr d'autres solutions comme utiliser un fichier XML,JSON ou Binaire à la place d'un fichier ini avec un FDmemtable et du livebinding (je suis feignant ce matin) c'est assez facile
    voici ce que j'ai déclaré dans le 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
      object FDMemTable1: TFDMemTable
        FieldDefs = <>
        IndexDefs = <
          item
            Name = 'FDMemTable1Index1'
          end>
        FetchOptions.AssignedValues = [evMode]
        FetchOptions.Mode = fmAll
        ResourceOptions.AssignedValues = [rvPersistent, rvSilentMode]
        ResourceOptions.Persistent = True
        ResourceOptions.SilentMode = True
        ResourceOptions.PersistentFileName = 'testcombo.fds'
        UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates]
        UpdateOptions.CheckRequired = False
        UpdateOptions.AutoCommitUpdates = True
        StoreDefs = True
        Left = 72
        Top = 180
        object FDMemTable1FDMemTable1Nom: TStringField
          FieldName = 'FDMemTable1Nom'
        end
        object FDMemTable1FDMemTable1Site: TStringField
          FieldName = 'FDMemTable1Site'
          Size = 80
        end
      end
      object BindSourceDB1: TBindSourceDB
        DataSet = FDMemTable1
        ScopeMappings = <>
        Left = 264
        Top = 144
      end
      object BindingsList1: TBindingsList
        Methods = <>
        OutputConverters = <>
        Left = 20
        Top = 5
        object LinkFillControlToField1: TLinkFillControlToField
          Category = 'Liaisons rapides'
          Control = ComboBox2
          Track = True
          FillDataSource = BindSourceDB1
          FillValueFieldName = 'FDMemTable1Site'
          FillDisplayFieldName = 'FDMemTable1Nom'
          AutoFill = True
          FillExpressions = <>
          FillHeaderExpressions = <>
          FillBreakGroups = <>
        end
      end

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

Discussions similaires

  1. [VB .NET] Copier les Items d'un ComboBox Vers un Autre
    Par D4rkTiger dans le forum Windows Forms
    Réponses: 6
    Dernier message: 06/08/2006, 12h05
  2. Recherche d'un item dans un combobox
    Par Remedy dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 03/06/2006, 10h35
  3. [VB.NET2005]PropertyGrid : utiliser un item d'une combobox
    Par NicolasJolet dans le forum Windows Forms
    Réponses: 1
    Dernier message: 30/03/2006, 15h51
  4. Incrémenter l'item d'un ComboBox
    Par Navi dans le forum Composants VCL
    Réponses: 24
    Dernier message: 26/12/2005, 22h16
  5. [VB.Net][DataGrid] Comment retirer des items d'un ComboBox ?
    Par graphicsxp dans le forum Windows Forms
    Réponses: 9
    Dernier message: 20/12/2005, 11h46

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