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 :

Bon usage de TDirectoryListBox


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 33
    Points : 27
    Points
    27
    Par défaut Bon usage de TDirectoryListBox
    Salut à tous.

    Avec le composant TDirectoryListBox, comment puis-je empêcher l'utilisateur de remonter dans l'arborescence ? J'aimerais qu'il ne puisse ouvrir que les dossiers présents dans un répertoire particulier.

    En résumé, à la place de cà :

    Nom : c1.jpg
Affichages : 404
Taille : 21,5 Ko
    ... je voudrais cà :

    Nom : c2.jpg
Affichages : 388
Taille : 20,5 Ko

    Possible ?

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Utiliser un SelectDirectory, en spécifiant le Root, cela limite l'accès, du moins selon mes souvenirs et sur XP

    Sinon, c'est très facile de coder soit même une ListBox avec FindFirst\FindNext, je le sais pour l'avoir fait quand j'étais apprenti pour ajouter un filtre sur les nom de dossier et\ou de fichier à ce contrôle en Delphi 4 (1999)
    Mon maitre d'apprentissage m'avait demandé de faire une fonction SelectMaskDirectory qui gère un Filter ce que je faisais pas SelectDirectory de l'époque, j'avais repris le code et modifié à ma sauce
    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

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    @ShaiLeTroll :
    SelectDir revient au même que précédemment. Ca laisse trop d'attitude à l'utilisateur qui peut fouiller l'ensemble du volume.

    Je me lance dans l'écriture d'une routine qui fait ce que j'attends. Les exemples du net parlent de récursivité mais je ne m'en sors pas en utilisant ce truc. (impossible de faire la distinction entre un dossier parent et les sous-dossiers qui le composent)
    Un peu d'aide ?

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Citation Envoyé par Kinesra Voir le message
    @ShaiLeTroll :
    SelectDir revient au même que précédemment. Ca laisse trop d'attitude à l'utilisateur qui peut fouiller l'ensemble du volume.
    Avec le SelectDirectory de XE2 et Windows Seven, cela limite au Root si tu utilises la bonne forme de SelectDirectory

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var
      D: string;
    begin
      SelectDirectory('salut', ExtractFileDir(Application.ExeName), D);
    end;
    Nom : SelectDirectoryRoot.jpg
Affichages : 376
Taille : 18,2 Ko


    Sinon, pour la récursivité, pour une question ancienne du forum, j'avais fourni ce code.
    Tu peux l'améliorer pour faire deux fonctions non récursives GetListDir et GetListFile pour créer l'arboresence (j'ai aussi ce code mais je ne sais pas où) pour remplir un TTreeView en LazyLoading (via OnChanging)

    Citation Envoyé par ShaiLeTroll Voir le message

    l'exemple de la FAQ
    est très bon, mais tu peux en faire une fonction réutilisable

    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
      {* ----------------------------------------------------------------------- }
      procedure GetListFile(const PathFile: string; ResultList: TStrings; Recurse: Boolean = False);
      var
        SearchRec: TSearchRec;
      begin
        ResultList.BeginUpdate();
        try
          if not Recurse then
            ResultList.Clear();
     
          // '*' ou '*.*' Renvoie '.' et '..'
          if SysUtils.FindFirst(PathFile + '*', faAnyFile, SearchRec) = 0 then
          begin
            try
              repeat
                if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
                begin
                  if Recurse then
                  begin
                    if (SearchRec.Attr and faDirectory) <> 0 then // Dossier
                      GetListFile(IncludeTrailingPathDelimiter(PathFile + SearchRec.Name), ResultList, True) // C'est un Dossier, on cherche les fichiers qu'il contient !
                    else
                      ResultList.Add(PathFile + SearchRec.Name) // Fournie Racine + Nom du Fichier
                  end
                  else
                    if (SearchRec.Attr and faDirectory) = 0 then // Fichier
                      ResultList.Add(SearchRec.Name); // Fourni juste le nom du Fichier
                end;
     
              until SysUtils.FindNext(SearchRec) <> 0;
            finally
              SysUtils.FindClose(SearchRec);
            end;
          end;
        finally
          ResultList.EndUpdate();
        end;
      end;
    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
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    Ok, j'ai écris ma routine à base d'un Treeview qui représente fidélement l'arborescence de mon dossier. Ca marche nickel.
    Je butte encore sur un problème tout con. Quand l'utilisateur créé un nouveau dossier (un nouveau noeud dans mon Treeview) nommé 'Nouveau dossier', j'aimerais qu'il puisse immédiatement changer son nom donc que le nom du nouveau noeud soit selectionné pour édition.
    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    Node.Text.SelStart = 0;
    Node.Text.SelLength := Lenght(Node.Text);
    .. n'est pas possible avec Delphi.

    Une idée ?

Discussions similaires

  1. du bon usage de ONCLICK
    Par devboy dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/05/2007, 15h52
  2. Bon Usage : Constructeur ou Load
    Par gridin dans le forum VB.NET
    Réponses: 1
    Dernier message: 10/05/2007, 07h48
  3. [Delphi - Firebird] Comment faire bon usage des transactions?
    Par Lili21 dans le forum Connexion aux bases de données
    Réponses: 2
    Dernier message: 07/05/2007, 20h59
  4. Quel est le bon usage des fichiers "*.bpk" ?!
    Par bnadem35 dans le forum C++Builder
    Réponses: 3
    Dernier message: 12/09/2006, 17h31
  5. [xml] bon usage du xml
    Par Jeddo dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 02/05/2005, 16h49

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