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 :

Cherche composant comme le TDirectoryListBox... [Sources]


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 89
    Par défaut Cherche composant comme le TDirectoryListBox...
    Salutation, je recherche un composant imitant le TDirectoryListBox mais pouvant monter jusqu'au bureau... et aussi en un peut plus agréable visuellement !!
    Ou mieux... si quelqu'un conai l'algorithme pour le faire avec un treeView (juste pour afficher les repertoires !!!!) ce serai mieux !!!!
    Merci de votre aide!
    Cordialement
    Walm

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Voilà un bout de code qui permet de construire le TreeView :
    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
    void __fastcall TFormPrincipale::AddChild(TTreeNode *Node1, char *NomDir)
    {
        static int NumNode = 1;
        TTreeNode *Node2;
        WIN32_FIND_DATA FileData;
        HANDLE hSearch;
        int On = 0;
        char szNewPath[MAX_PATH];
        char szHome[MAX_PATH];
        sprintf(szHome, "%s\\*.*", NomDir) ;
        strcpy(szNewPath, BonDir(szHome));
        BOOL fFinished = FALSE;
     
        hSearch = FindFirstFile(szNewPath, &FileData);
        if (hSearch == INVALID_HANDLE_VALUE)
        {
            return;
        }
        while (!fFinished)
        {
            if (((FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY )
                && FileData.cFileName[0] != '.')
            {
                On = 1;
                Node2 = TreeView1->Items->AddChild(Node1, FileData.cFileName);
                sprintf(szNewPath, "%s\\%s", NomDir,FileData.cFileName);
                AddChild(Node2, szNewPath);
            }
            if (!FindNextFile(hSearch, &FileData))
                fFinished = TRUE;
        }
        FindClose(hSearch);
    }
     
    void __fastcall TFormPrincipale::AddNode(TTreeNode *Node1, char *NomDir)
    {
        WIN32_FIND_DATA FileData;
        TTreeNode *Node2;
        HANDLE hSearch;
        char szNewPath[MAX_PATH];
        char szHome[MAX_PATH];
        sprintf(szHome, "%s\\*.*", NomDir) ;
        strcpy(szNewPath, BonDir(szHome));
        BOOL fFinished = FALSE;
     
        hSearch = FindFirstFile(szNewPath, &FileData);
        if (hSearch == INVALID_HANDLE_VALUE)
        {
            return;
        }
     
        while (!fFinished)
        {
            if (((FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY )
                && FileData.cFileName[0] != '.')
            {
                Node2 = TreeView1->Items->Add(Node1, FileData.cFileName);
                sprintf(szNewPath, "%s\\%s", NomDir, FileData.cFileName);
                AddChild(Node2, szNewPath);
            }
            if (!FindNextFile(hSearch, &FileData))
                fFinished = TRUE;
        }
        FindClose(hSearch);
    }
    C'est tiré tout simplement du MSDN.
    Appel par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AddNode(NULL, "mon_rep");
    Note : Bondir me permet de me raccrocher un Répertoire initial de parcour dont "mon_rep" est déjà un sous répertoire.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 89
    Par défaut
    Salutation,
    Merci de ton aide Trape D...
    Ta fonction "Bondir"... C toi qui l'a codée ou elle est dans une bibliotheque?
    Dans chaqun des cas precedent, si tu peux me donner le code ou la bibliotheque...
    10000 Mercis pour ton aide
    Bonne continuation
    Cordialement
    Walm

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Bondir est une fonction perso, elle concatène le nom de répertoire passé en argument à un autre nom de répertoire pour former un chemin absolu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    char *Bondir(char *rep)
    {
       // chemin absolu du reprtoire passé en argument
       static  char chemin[MAX_PATH]; 
       // repertoire d'installation de données de mon application, 
       // obtenu par lecture dans la base de registre; il y a une initialisation que je ne donne pas ici
       static  char chemin[MAX_PATH]; 
     
       strcpy(chemin, repertoire);
       strcat(chemin, rep);
       return chemin;
    }
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 89
    Par défaut
    Salutation,
    et si je debute toujours par le bureau, ca ne simplifie pas la fonction et on n'est plus obligé de passer par ta fontion Bondir ?!
    Cordialement
    Walm

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Bondir en fait ne sert pas à grand chose pour la recherche, il suffit de faire le premier appel avec le chemin d'accès complet au répertoire, et après tu peux t'en passer.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 89
    Par défaut
    SAlutation,
    Est t'il nomal qu'avec cette mthode (qui quand même n'est pas rapide), je n'arrive pas a avoir comme racine quelque chose de plus haut qu'une unité de lecteur?

    Ou si quelqu'un a une autre solution

    Merci de votre aide
    Cordialement
    Walm

  8. #8
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Salut

    Pour ce qui est de la vitesse, n'oublie pas qu'il y a exploration de l'aborescence complète des répertoires, tu peux accélérer la procédure en empêchant les affichages pendant l'exploration.

    Pour avoir le bureau, je n'ai jamais essayé. Avec l'API GetOpenFilename, ça doit fonctionner.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

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

Discussions similaires

  1. Cherche Composant pour développer un jeu sous DELPHI 6 ?
    Par baltagi dans le forum Composants VCL
    Réponses: 1
    Dernier message: 26/11/2005, 12h25
  2. cherche model comme "TOP 10" !
    Par ada_b dans le forum SQL
    Réponses: 6
    Dernier message: 12/12/2004, 12h52
  3. Cherche composant comme TComPort mais pour l'USB
    Par Walm dans le forum C++Builder
    Réponses: 3
    Dernier message: 15/04/2004, 15h57
  4. [Kylix] cherche composants pour les sockets
    Par coriolis dans le forum EDI
    Réponses: 1
    Dernier message: 09/04/2003, 10h18
  5. Cherche composant Web Browser indépendant
    Par lancelot69 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 31/07/2002, 11h14

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