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 :

Utilisation d'un TreeView et +


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Points : 171
    Points
    171
    Par défaut Utilisation d'un TreeView et +
    Bonjour,
    Je souhaite gérer deux champs de données que j'appellerai Catégories et Sous catégories.

    Je saisie ces valeurs à l'aide d'un TreeWiew comme suit
    Nom : ExempleCategories.jpg
Affichages : 157
Taille : 61,4 Ko

    Et ensuite je voudrais les employer sur un écran de Saisie comme cela:
    Nom : Saisies.jpg
Affichages : 148
Taille : 12,2 Ko

    C'est a dire si je sélectionne comme catégories: Assurances, je voudrais que dans le champ Sous Catégories n'apparaissent que les rubriques concernant la catégorie Assurance

    Bien sur ces champs sont des combobox et la finalité serait les remplir avec le valeurs du TreeWiew

    Es ce la bonne solution ?

    Sauver le treeView on peut le faire dans un fichier texte, qui est formaté de cette façon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Assurance
    	Voitures
    	Habitation
    mais comment les utiliser dans le 2 Combo ?

    Je ne sais pas par quel bout prendre le problème?

    Merci pour votre aide

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 149
    Points : 65
    Points
    65
    Par défaut
    Bonjour,
    Il faudrait définir une structure de stockage des catégo et ss-catégo, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Tcatego = record
      catego : string;
      sscate  : TStrings;
    end
     
    //ou via une seule TStrings
     
    var
      ListeCatego1 : array of Tcatego;
    //ou
      ListeCatego2 : array of TStrings;  // catego en index 0 et sscat ensuite
    Ensuite, il faut mettre à jour le Combo1 avec la liste des catego puis gérer la mise à jour de la liste du Combo2 lors de l'événement Combo1OnChange.
    Une belle fonction contient au plus 7 lignes de code,
    Une belle procédure appelle au plus 7 fonctions,
    Un beau programme est lisible et compréhensible,
    Dans tous les autres cas, une optimisation s'impose.

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Je ne suis absolument pas d'accord avec sbadecoder pourquoi ajouter une structure de stockage alors qu'on l'a déjà : l'arbre.

    Il faut "tout simplement" récupérer les enfants du noeud FAQ

    Bon, bien sûr ici il s'agit de FMX et non de VCL mais le principe restera le même

    dans l'évènement OnChange du combobox1
    code FMX écrit à la volée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var 
        c: Integer;
        AnItem : TTreeViewItem;  
    begin
    ComboBox2.items.Clear;
    AnItem:=Treeview1.ItemByIndex(Combobox1.ItemIndex);
    for c:=0 to AnItem.Count-1 do 
      Combobox2.Items.Add(AnItem.ItemByIndex(c).Text);
    end;
    Une seule contrainte, il faut que combobox1 soit rempli de la même manière, au moment du remplissage de l'arbre afin de garder le même ordre


    en VCL le code devrait même être légèrement plus simple mais cela fait un bail que je n'ai pas toucher à des treeviews VCL, il me faudra un petit rafraichissement de mémoire
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    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 452
    Points : 24 863
    Points
    24 863
    Par défaut
    Il faudrait en savoir plus sur le Worflow
    Les Combo sont-elles dans le même écran que le TTreeView ?
    J'ai l'impression que l'on d'abord un TTreeview dans un écran de configuration pour l'utilisateur admin
    Puis ailleurs, surement pour un autre utilisateur lambda, un écran d'exploitation avec les combos

    Je pense qu'il faudrait créer une table CATEGORIE ( CAT_ID, CAT_PARENT_ID, LIBELLE) de façon à stocker l'arbre

    Ensuite, remplir des combos, je ne vois pas la difficulté, voire même un TDBLookupComboBox qui gère une ListSource en DB en plus de son DataSource
    Couplé avec un MasterSource au ListSource secondaire, les deux combos pourrait être rempli automatiquement

    Soyez plus précis sur le besoin, le process, l'ergonomie de l'application
    Utilisez une base de données ou autre pour stocker dans le temps cette configuration ?
    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

  5. #5
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Points : 171
    Points
    171
    Par défaut
    Bonjour Shail

    J'ai l'impression que l'on d'abord un TTreeview dans un écran de configuration pour l'utilisateur admin
    Puis ailleurs, surement pour un autre utilisateur lambda, un écran d'exploitation avec les combo
    Effectivement le Combos ne sont pas dans le même écran.

    Ta solution de passer par la création d'une table me paraît plus logique pour ce que je veux obtenir.
    Je butais un peu sur les autres solutions proposées

    Par contre comment stocker mon TTreeWiew dans cette table !

    J'essaye et vous tiens au courant

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    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 452
    Points : 24 863
    Points
    24 863
    Par défaut
    On ne stocke pas le TTreeview mais les données métiers, dans votre cas les Catégories

    C'est l'inverse qu'il faut penser
    Travailler sur un modèle de donnée, puis ensuite vient la présentation

    Tu manipules plutôt un TDataSet ou TQuery, qui sert pour stocker la donnée en mémoire ainsi que la reporter sur le SGBD
    Et l'affichage du TTreeView vient s'ajouter à cela

    Le Data pouvant stocker par exemple le TBookmark pour une navigation rapide.


    Tout cela au final, c'est une gestion de Thésaurus
    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
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Points : 171
    Points
    171
    Par défaut
    J'ai donc tranché la question en créant Tables Maitre-Détails.

    Ma sauvegarde est faite sur la base directement

    Et je rempli mes automatiquement mes 2 ComboBox lors du OnCreate

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/11/2010, 15h47
  2. [AC-2003] Utilisation d'un treeview TreeCtrl
    Par lio33 dans le forum IHM
    Réponses: 2
    Dernier message: 10/02/2010, 09h51
  3. Réponses: 4
    Dernier message: 01/08/2009, 17h44
  4. Utilisation d'un treeView
    Par Yann_br dans le forum ASP.NET
    Réponses: 10
    Dernier message: 11/10/2007, 14h38
  5. Utilisation d'un treeview
    Par t0ine dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/02/2006, 09h11

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