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 :

TTreeview, se positionner sur un noeud dont on connaît la propriété 'text'


Sujet :

Delphi

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 126
    Points : 107
    Points
    107
    Par défaut TTreeview, se positionner sur un noeud dont on connaît la propriété 'text'
    A l'ouverture du TTreeview, en l'occurence il s'agit de l'arborescence des dossiers de l'ordinateur, j'aimerais pouvoir me positionner sur un dossier dont je connais l'identité.

    Est-ce possible? Je n'ai rien trouvé dans la FAQ, ni dans l'aide de Delphi.

    Merci.

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

    Informations forums :
    Inscription : Août 2002
    Messages : 144
    Points : 157
    Points
    157
    Par défaut
    Salut, il me semble qu'il n'existe aucune fonctions predefinie dans delphi pour cela, mais rien ne t'empeche de t'en créer une... par exemple, essaie ce petit bout de code, en créant une nouvelle application en inserant 3 controles (1 Ttreeview, 1 tbuton, et un tEdit) sur la form principale.



    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, StdCtrls;
     
    type
      TForm1 = class(TForm)
        TreeView1: TTreeView;
        Button: TButton;
        Edit: TEdit;
        procedure ButtonClick(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        function GetNodeByText(Treeview : TTreeview; Text:string):TTreenode;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    function TForm1.GetNodeByText(Treeview : TTreeview; Text: string): TTreenode;
    var
      CurrentNode : TTreenode;
    begin
      Result := nil;
      CurrentNode := Treeview.Items.GetFirstNode;
      while CurrentNode <> nil do
      begin
        if CurrentNode.Text = Text then
        begin
          Result := CurrentNode;
          exit;
        end;
        CurrentNode := CurrentNode.GetNext;
      end;
    end;
     
    procedure TForm1.ButtonClick(Sender: TObject);
    begin
      try
        TreeView1.Selected := GetNodeByText(TreeView1,Edit.Text );
        ActiveControl := TreeView1;
      except
     
      end;
    end;

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 126
    Points : 107
    Points
    107
    Par défaut
    Merci pour ta réponse, MedGIR

    J'ai essayé ton code. Il fonctionne très bien, sauf qu'il ne s' applique qu'à la partie de l'arbre qui est développée.
    Dans mon cas où je veux atteindre un dossier quelconque de l'ordinateur, il faudrait que je développe entièrement tous les dossiers, ce qui est inimaginable.

    J'ai trouvé un composant visuel (Exemples) qui malheureusement est absent de l'aide de Delphi 7: TShellTreeView, qui répond exactement à mon besoin.

    Se positionner sur un dossier donné est prévu et voici le code d'une unité réalisant le choix d'un dossier avec initialisation, finalement c'est très simple encore fallait-il mettre la main dessus:

    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
    unit ChoixDossier;
     
    interface
     
    uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
          Dialogs, ComCtrls, ShellCtrls, StdCtrls;
    type
      TDossierForm = class(TForm)
        ShellTreeView: TShellTreeView;
        EditDossierChoisi: TEdit;
        procedure FormCreate(Sender: TObject);
        procedure ShellTreeViewChange(Sender: TObject; Node: TTreeNode);
      private 
      { Déclarations privées }
      public  
      { Déclarations publiques }
      end;
    var
      DossierForm  : TDossierForm;
      DossierChoisi: string;
    const
      DossierInitial = 'D:\Developpement\Pte';
     
    implementation
     
    {$R *.dfm}
     
    procedure TDossierForm.FormCreate(Sender: TObject);
    begin
      ShellTreeView.Path := DossierInitial;  // positionnement initial
      DossierChoisi      := '';
    end;
     
    procedure TDossierForm.ShellTreeViewChange(Sender: TObject;
      Node: TTreeNode);
    begin
      with Node do if ( AbsoluteIndex<> 0 ) then 
      begin                                         
        Selected      := TRUE;
        ActiveControl := ShellTreeView;
        DossierChoisi := ShellTreeView.Path;     
      end;
      EditDossierChoisi.Text := DossierChoisi; // affichage du dossier choisi
    end;
     
    end.
    Merci encore de t'intersser à cette question. Je crois que je vais en proposer
    une FAQ car avant de trouver la réponse idoine j'ai passé beaucoup de temps.

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 25/03/2016, 23h14
  2. Se positionner sur le dernier noeud d'un fichier XML
    Par Hinault Romaric dans le forum C#
    Réponses: 5
    Dernier message: 22/08/2009, 12h08
  3. Comment se positionner sur un noeud d'un TTreeView ?
    Par Cazaux-Moutou-Philippe dans le forum Langage
    Réponses: 3
    Dernier message: 18/01/2008, 10h54
  4. Réponses: 1
    Dernier message: 06/03/2007, 13h46
  5. Réponses: 8
    Dernier message: 18/11/2006, 12h04

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