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 :

[Algo] Comment construire cette hiérarchie avec VirtualStringTree ?


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Par défaut [Algo] Comment construire cette hiérarchie avec VirtualStringTree ?
    Bonjour à tous,

    Je suppose que cela doit être facile pour certain de faire cela, mais j'avoue que pour moi c'est un peu trop.

    Je cherche à représenter dans un VirtualStringTree (j'y tiens à ce composant)
    la hierarchie que je rencontre dans mon fichier texte donné ci-dessous.

    Mon fichier Texte contient (Def. Définition, Ref. Référence):
    Def. 1
    Def. 2 qui fait Ref. à Def. 1
    Def. 3 qui fait Ref. à Def. 1
    Def. 4 qui fait Ref. à Def. 3
    Def. 5
    Def. 6 qui fait Ref. à Def. 5
    Def. 7 qui fait Ref. à Def. 6
    ce qui donnerai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Def 1. + Texte
     |_ Def 2. + Texte
     |_ Def 3. + Texte
          |_Def 4. + Texte
    Def 5. + Texte
     |_Def 6. + Texte
         |_Def 7. + Texte
    Toutes les données sont textuelles, c'est vraiment du texte/phrase que j'ai et qui commence par Def.x et dans lequel il y a le mot Ref.y

    Le mieux pour moi serait un petit code source, mais là je sais que j'abuse donc vos conseils seront les bienvenus biensûr !

    D'avance merci à tous pour vos réponses.
    Amicalement,
    Bruno

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2002
    Messages : 144
    Par défaut
    Bonjour, pour utiliser la virtualtreeview de Soft-gems, il faut imperativement utiliser des pointeurs et des objets.

    Dans ton cas, tu devrais créer un objet comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Type
     
    TMonObjet = class
    published
     property Definition : string read fDefinition write fDefinition;
     property Reference : string read fReference write fReference;
    end;
    Après dans ton code qui lira ton fichier texte, par exemple quand on appuie sur le bouton1

    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
    procedure Tform1.Button1Onclick(Sender : tobject);
    var
     MonObject : tMonObjet;
    begin
     NomDeLaVirtualTree.NodeDataSize := SizeOf(tMonObjet); 
     NomDeLaVirtualTree.Clear;
     
     //Lecture sequentielle de ton fichier texte
     //A toi de faire la boucle
     //A chaque enregistrement trouvé tu dois créer un objet avec ses propriétés mise à jour...
     //Par exemple avec une base de données en non pas un fichier texte, mais le principe est le meme:
     Fichier.Open;
     Fichier.First;
     While not Fichier.eof do
     begin
      MonObjet := TMonObjet.create;
      MonObjet.Definition := Fichier.Field('Def').asString;
      MonObjet.Reference := Fichier.Field('Ref').asString;
      //Appel de la fonction (GetFather) que l'on aura crée pour trouver le noeud père
      NomDeLaVirtualTree.addChild(GetFather(MonObjet),MonObjet);
      Fichier.Next;
     end;
    end;
    Description de la fonction GetFather:

    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
    function tForm1.GetFather(MonObjet : tMonObjet):pVirtualNode;
    var
     data : ^TMonObjet;
     CurrentNode : pVirtualnode;
    begin
     result := nil;
     CurrentNode := NomDeLaVirtualTree.GetFirst;
     While CurrentNode <> nil then
     begin
      Data := NomDeLaVirtualTree.getNodeData(CurrentNode);
      If data.Reference = MonObject.Reference then
      begin
       Result := CurrentNode;
       Break; 
      end;
     CurrentNode := NomDeLaVirtualTree.GetNext(CurrentNode);
     end;
    end;
    Maintenant il faut afficher le contenu

    Dans l'evenement OnGetText de la treeview
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure Tform1.NomDeLaVirtualTreeGetText(Sender: TBaseVirtualTree;
      Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
      var CellText: WideString);
    var
      Data : ^TMonObjet;
    begin
      Data := Sender.GetNodeData(Node);
      CellText := Data.Definition;
    end;
    Voila, voila, j'espère que je t'aurais un peu aidé... et que j'ai été a peu près clair et compréhensible

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Par défaut
    Salut MedGir,

    Merci bcp pour ta réponse, c'est tout à fait l'aide que j'osais espérer.
    Je teste cela tout de suite dans un petit projet et je reviens sur ce post pour te tenir informé.

    Amicalement,
    Bruno

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Par défaut
    Re-Bonjour MedGir,

    Mise à part une ou deux petite modif ton source marche impecable !!
    J'ai ouvert un autre post car maintenant c'est l'extraction des chaines de caractères à exrtaire pour remplir mes objets qui me pose problème.

    Amicalement,
    Bruno

  5. #5
    Membre éprouvé
    Inscrit en
    Août 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2002
    Messages : 144
    Par défaut
    Je suis content que cela t'ai servi... En effet, il pouvait y avoir quelles erreurs, je n'avais pas Delphi sous la main quand je t'ai proposé le code...

    Bon developpement

    Normalement dans les semaines a venir, je devrais proposer un tutoriel d'utilisation de la virtualtreeview sur www.developpez.com... Mais il me faut du temps...

  6. #6
    Fxg
    Fxg est déconnecté
    Membre émérite
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 513
    Par défaut
    Je te remercie d'avance pour ton tuto que j'attends avec impatience. Il est pas toujours facile de s'en servir même avec les exemples quand c'est la première fois que l'on veut utiliser les treeview

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/05/2015, 12h24
  2. [2.x] comment afficher cette variable avec js dans le twig
    Par adel25 dans le forum Symfony
    Réponses: 2
    Dernier message: 24/07/2013, 11h47
  3. Comment faire une boucle avec cette procédure
    Par soffy dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/06/2007, 22h28
  4. [hamming] Comment utiliser cette fonction avec Matlab 6.5
    Par vivematlab dans le forum Signal
    Réponses: 2
    Dernier message: 02/05/2007, 16h52

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