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

C++Builder Discussion :

Sélectionner des dossiers


Sujet :

C++Builder

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 25
    Points : 27
    Points
    27
    Par défaut Sélection de dossiers via une treeview
    Bonjour,
    je cherche le moyen d'obtenir une sélection de dossier via une treeview avec checkbox comme ceci :

    Je suis sous C++ Builder 2009 et je ne parviens pas à trouver de compossants compatibles.
    Si vous connaissez un moyen sous C++ Builder 6 je suis également preneur.
    Merci d'avance!

  2. #2
    Membre confirmé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Points : 523
    Points
    523

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 25
    Points : 27
    Points
    27
    Par défaut Abandon
    Bonjour,
    merci pour ta réponse, qui malheuresement, ne m'a pas grandement aidée.
    J'ai finalement abandonné les checkbox et j'ai amélioré une source postée sur le forum :
    http://www.developpez.net/forums/d94...ectorylistbox/

    Je l'es modifiée pour améliorer grandement la rapidité d'affichage (Affichage au fur et à mesure de l'exploration, et non pas tout d'un coup).
    Il reste pas mal de chose à faire, mais c'est une bonne base.

    Je poste la source pour les intéressés, je n'es pas mis de commentaires, mais le code est très simple.

    Nécessite une treeview et un bouton.

    Fichier Unit1.h :
    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
     
    //---------------------------------------------------------------------------
     
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <ComCtrls.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Composants gérés par l'EDI
    	TTreeView *TreeView1;
    	TButton *Button1;
    	void __fastcall TreeView1Expanding(TObject *Sender, TTreeNode *Node, bool &AllowExpansion);
    	void __fastcall Button1Click(TObject *Sender);
     
     
     
    private:	// Déclarations utilisateur
    public:		// Déclarations utilisateur
    	__fastcall TForm1(TComponent* Owner);
    	void AddChild(TTreeNode *Node1, char *NomDir);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    Fichier Unit1.cpp :
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #include <stdio.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma link "cdiroutl"
    #pragma resource "*.dfm"
     
    TForm1 *Form1;
    void DiskList(TStrings* Liste);
     
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
     
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TreeView1->Items->Clear();
    TTreeNode *Node;
    TStrings *Liste;
    Liste=new TStringList;
    DiskList(Liste);
    int i=0;
    while(i<Liste->Count)
    {
    Node = TreeView1->Items->Add(NULL, Liste->Strings[i]);
    AddChild(Node, Liste->Strings[i].c_str());
    i++;
    }
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::TreeView1Expanding(TObject *Sender, TTreeNode *Node, bool &AllowExpansion)
     
    {
    AnsiString Path=Node->Text;
    TTreeNode *Node2=Node->Parent;
    TTreeNode *Node3;
    while(Node2!=NULL)
    {
    Path=Node2->Text+"\\"+Path;
    Node3=Node2;
    Node2=Node3->Parent;
    }
    int i=0;
    while(i<Node->Count)
    {
    AddChild(Node->Item[i], (Path+"\\"+Node->Item[i]->Text).c_str());
    i++;
    }
    }
    //---------------------------------------------------------------------------
     
    void TForm1::AddChild(TTreeNode *Node1, char *NomDir)
    {
    	WIN32_FIND_DATA FileData;
    	HANDLE hSearch;
    	char szNewPath[MAX_PATH];
    	sprintf(szNewPath, "%s\\*.*", NomDir) ;
     
    	hSearch = FindFirstFile(szNewPath, &FileData);
    	if (hSearch == INVALID_HANDLE_VALUE)
    	{
    		return;
    	}
    	do
    	{
    		if (((FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY )
    			&& FileData.cFileName[0] != '.')
    		{
    			TreeView1->Items->AddChild(Node1, FileData.cFileName);
    		}
    	}while (FindNextFile(hSearch, &FileData));
    	FindClose(hSearch);
    }
    //---------------------------------------------------------------------------
     
    void DiskList(TStrings* Liste)
    {
    	int ch = 0;
    	char DriveSt[127];
    	GetLogicalDriveStrings(126, DriveSt);
     
    	while ( DriveSt[ch] != 0 )
    	 {
    	  Liste->Add(&DriveSt[ch]);
    	  ch += strlen(&DriveSt[ch])+1;
    	 }
    }
    //---------------------------------------------------------------------------
    a+

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

Discussions similaires

  1. Parcourir et sélectionner des fichiers et dossiers
    Par diabolokev dans le forum C#
    Réponses: 17
    Dernier message: 14/01/2013, 20h51
  2. sélectionner des fichiers et des dossiers
    Par bog333 dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 23/12/2008, 16h31
  3. [TP]avoir laliste des dossiers d'un repertoire
    Par fokou robby dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 21/02/2004, 16h13
  4. Abbrevia et suprimer des dossiers pleins
    Par smyley dans le forum Langage
    Réponses: 6
    Dernier message: 11/06/2003, 15h25

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