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 :

Fonctionnement d'un ShellListView


Sujet :

Delphi

  1. #1
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut Fonctionnement d'un ShellListView
    Bonjour,
    dans un ShellListView, j'affiche la liste des répertoires et des fichiers.

    Quand on double clique sur un fichier, l'application associée au type de fichier s'ouvre automatiquement.

    Je voudrais que, lors d'un double clic :

    - mon code dans OnDblClick s’exécute si c'est un fichier (sans ouverture de l'appli associée au fichier) ;
    - que le répertoire change si c'est un répertoire ;

    Est ce possible ? je n'ai rien vu dans les propriétés du ShellListView.

    Merci pour vos réponses

    A+
    Charly

  2. #2
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour,

    Il y a la propriété AutoNavigate.
    Si tu l'initialises à false + le code suivant dans l'événement OnDblClick :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    with ShellListView1 do
        if (Selected <> nil) then
           with Folders[Selected.Index] do
              if IsFolder then ExecuteDefault;
    Cordialement
    Thierry

  3. #3
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Merci William,

    j'ai testé ta solution, mais ce n'est pas tout à fait ce que je veux : quand on double clique sur un répertoire, l'explorateur de fichier s'ouvre.

    J'ai adopté une autre solution "à l'arrache" mais qui fonctionne :

    j'ai recopié et ajouté à mon projet ShellCtrls.pas et j'ai modifié la procédure DblClick du ShellListview comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TCustomShellListView.DblClick;
    begin
      if FAutoNavigate and (Selected <> nil) then
        with Folders[Selected.Index] do
          if IsFolder then
            SetPathFromID(AbsoluteID)  
          else
             F_Princ.TraiteFichier ;
    //        ShellExecute(Handle, nil, PChar(PathName), nil,
    //          PChar(ExtractFilePath(PathName)), 0);
      inherited DblClick;
    end;
    Si je ne trouve pas mieux je vais conserver cette solution

    A+
    Charly

  4. #4
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour Charly.

    Je suppose que F_Princ désigne ta TForm principale.
    Tu as donc du déclarer dans ShellCtrls.pas l'unité de F_Princ.
    Bien sûr, cela marche, mais une manière plus "propre" serait d'ajouter un événement du genre OnTraiteFichier.
    Dans TCustomShellListView :
    champ privé : FOnTraiteFichier: TNotifyEvent
    propriété publique : property OnTraiteFichier: TNotifyEvent read FOnTraiteFichier write FOnTraiteFichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TCustomShellListView.DblClick;
    begin
      if FAutoNavigate and (Selected <> nil) then
        with Folders[Selected.Index] do
          if IsFolder then
            SetPathFromID(AbsoluteID)  
          else
             if Assigned(FOnTraiteFichier) then FOnTraiteFichier(self);
      inherited DblClick;
    end;
    Bon dimanche à toi
    Thierry

  5. #5
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Bonjour William,

    ta solution est évidement la meilleure !

    Merci beaucoup
    A+
    Charly

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/06/2003, 16h51
  2. Réponses: 5
    Dernier message: 14/05/2003, 14h51
  3. [Turbo Pascal] TP7 fonctionne en QWERTY
    Par callahan dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 08/02/2003, 21h49
  4. Prb de fonctionnement dans SaveDialog avecInitialDir
    Par boyerf dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/12/2002, 21h46
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

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