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

Composants VCL Delphi Discussion :

DriveCombobox Liste des lecteurs


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Points : 68
    Points
    68
    Par défaut DriveCombobox Liste des lecteurs
    Bonjour à tous,

    Tout d'abord, je vous souhaite une très bonne année 2012

    Dans mon DriveComboBox, je souhaite filtre les lecteurs. Plus précisément, afficher les lecteurs amovibles (clé USB).

    J'ai trouvé un code qui est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    var DriveList : DWORD ;
         iDL : Integer ;
         TypeLecteur : Integer ;
    begin
        for iDL := 0 to 26 do
        begin
            TypeLecteur := GetDriveType(PChar(Chr(Ord('A') + iDL))) ;
        end ;
    end ;
    Copier-coller un code n'est pas pour moi une manière d'avancer surtout si en plus il est faux... Que veut dire iDL ? Pourquoi 0 à 26 ?! Quelqu'un peut-il m'aider ? En vous remerciant d'avance.

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Logiquement les lettres des lecteurs vont de A à Z donc logiquement de 1 à 26.
    Sinon Idl est juste le nom de la variable de la boucle For

    Après il faut voir ce que veut comme valeur GetDriveType

    Citation Envoyé par Aide Delphi
    GetDriveType

    The GetDriveType function determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive.

    To determine whether a drive is a USB-type drive, call SetupDiGetDeviceRegistryProperty and specify the SPDRP_REMOVAL_POLICY property.


    UINT GetDriveType(
    LPCTSTR lpRootPathName
    );

    Parameters
    lpRootPathName
    [in] The root directory for the drive.
    A trailing backslash is required. If this parameter is NULL, the function uses the root of the current directory.

    Return Value
    The return value specifies the type of drive, which can be one of the following values.

    Return code Description
    DRIVE_UNKNOWN The drive type cannot be determined.
    DRIVE_NO_ROOT_DIR The root path is invalid; for example, there is no volume is mounted at the path.
    DRIVE_REMOVABLE The drive has removable media; for example, a floppy drive or flash card reader.
    DRIVE_FIXED The drive has fixed media; for example, a hard drive, flash drive, or thumb drive.
    DRIVE_REMOTE The drive is a remote (network) drive.
    DRIVE_CDROM The drive is a CD-ROM drive.
    DRIVE_RAMDISK The drive is a RAM disk.

    [Edit]

    Autre manière de l'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var 
        cI : Char;
         TypeLecteur : Integer ;
    begin
        for Ci  in ['A'..'Z'] do
        begin
            TypeLecteur := GetDriveType(PChar(cI)) ;
        end ;
    end ;

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Points : 68
    Points
    68
    Par défaut
    Merci, c'est vrai j'avoue que j'avais pas fait le rapprochement avec 26 et le nombre total des lettres de l'alphabet

    J'ai repris ton code, c'est plus compréhensif pour moi mais j'obtiens une erreur: [Erreur] Unit1.pas(30): La variable de contrôle de boucle FOR doit être une variable locale simple

    J'ai utilisé la fabuleuse et magnifique touche F1 et j'ai organisé mon programme de la manière suivante mais toujours la même erreur :

    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
    var
      Form1: TForm1;
      cI : Char;
      TypeLecteur : Integer ;
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender : TObject);
    begin
        for cI  in ['A'..'Z'] do
        begin
            TypeLecteur := GetDriveType(PChar(cI)) ;
        end ;
    end ;
    end.
    Par contre, j'ai une question un peu "débile" mais je pose quand même... J'espère que vous n'allez pas vous arracher les cheveux... Bon, j'y vais...

    Je souhaite lister dans ma DriveComboBox que les disques durs, mais comment dois-je procéder pour
    To determine whether a drive is a USB-type drive, call SetupDiGetDeviceRegistryProperty and specify the SPDRP_REMOVAL_POLICY property.
    ? Je suis désolée, je suis débutante et j'avoue que je suis complètement perdue dans l'info...

    La fonction est appelée avec l'évènement OnCreate de Form1. Pour le bon fonctionnement, faut-il laisser l'évènement de la fonction à cet endroit ou utiliser un évènement dans mon DriveComboBox ?!

  4. #4
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 674
    Points : 7 066
    Points
    7 066
    Par défaut
    Citation Envoyé par ptitemeuh Voir le message
    Je souhaite lister dans ma DriveComboBox que les disques durs, mais comment dois-je procéder pour ?
    Utilises GetDriveType.

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 587
    Points : 25 263
    Points
    25 263
    Par défaut
    Citation Envoyé par ptitemeuh Voir le message
    Que veut dire iDL ?
    C'est une notation qui se comprend mieux avec le code d'origine mais avec les éléments que l'on a, cela se comprend tout de même !
    i comme integer ou itérateur
    DL comme initiale de DriveList !
    Donc c'est un itérateur sur DriveList !

    Citation Envoyé par ptitemeuh Voir le message
    Pourquoi 0 à 26 ?!.
    Cela devrait être 0 à 25 !
    26 lettres dans l'Alphabet
    de 'A' + 0 = 'A' jusqu'à 'A' + 25 = 'Z'

    la syntaxe for in [] n'existe que pour des Delphi très récents !
    Code style D7 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var
      iLetter: Integer;
      DrivePath: string;
    begin
      for iLetter := Ord('A') to Ord('Z') do 
      begin
        DrivePath := Chr(iLetter) + ':\';
        if GetDriveType(PChar(DrivePath)) = DRIVE_FIXED then
        begin
          // Les DD !
        end;
      end;
    end;
    A Vérifier, si l'on peut en D7, utiliser directement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var
      Letter: Char;
      DrivePath: string;
    begin
      for Letter := 'A' to 'Z' do 
      begin
        DrivePath := Letter + ':\';
    ...

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par ptitemeuh Voir le message
    J'ai repris ton code, c'est plus compréhensif pour moi mais j'obtiens une erreur: [Erreur] Unit1.pas(30): La variable de contrôle de boucle FOR doit être une variable locale simple
    Normal, cI est une variable "globale" comme tu l'as mis, pour que cela fonctionne il faut que tu mettes cI dans l'implémentation de ta procédure (ou de la forme)

    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
     
     TForm1 = class(TForm)
      Public
        // cI : Char; // <--- Ici ou plus voir plus bas
      end;
     
    var
      Form1: TForm1;
      TypeLecteur : Integer ;
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender : TObject);
    var
     cI : Char; // Ici 
    begin
        for cI  in ['A'..'Z'] do
        begin
            TypeLecteur := GetDriveType(PChar(cI)) ;
        end ;
    end ;

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Points : 68
    Points
    68
    Par défaut
    J'ai essayé les deux et toujours la même erreur... Voici tout mon code:

    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, FileCtrl;
     
    type
      TForm1 = class(TForm)
      DriveComboBox1: TDriveComboBox;
      procedure FormCreate(Sender : TObject);
     
      private
        { Déclarations privées }
      public
      cI : Char;
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      TypeLecteur : Integer ;
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender : TObject);
    //var cI : Char;
    begin
        for cI  in ['A'..'Z'] do
        begin
            TypeLecteur := GetDriveType(PChar(cI)) ;
        end ;
    end ;
    end.
    J'utilise Delphi 6, est-ce ça le problème ?

  8. #8
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par ptitemeuh Voir le message
    J'utilise Delphi 6, est-ce ça le problème ?
    Peut être moi je tourne avec d2007 ou XE

    sinon ShaiLeTroll a dit

    Citation Envoyé par ShaiLeTroll Voir le message
    la syntaxe for in [] n'existe que pour des Delphi très récents !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var
      Letter: Char;
      DrivePath: string;
    begin
      for Letter := 'A' to 'Z' do 
      begin
        DrivePath := Letter + ':\';
    ...

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 587
    Points : 25 263
    Points
    25 263
    Par défaut
    @ptitemeuh, prend le code fourni du 04/01/2012 15h38
    Semble que tu n'as pas lu ma réponse, ton code est incomplet, il n'est pas adapté à D6 (tu utilises bien D6 et non pas D2006 ?)
    De plus, il ne fait pas grand chose d'utile !
    Merci de lire complètement ce que l'on écrit, sinon ce n'est pas la peine de poser des questions et que l'on prenne du temps pour y répondre !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var
      iLetter: Integer;
      DrivePath: string;
    begin
      for iLetter := Ord('A') to Ord('Z') do 
      begin
        DrivePath := Chr(iLetter) + ':\';
        if GetDriveType(PChar(DrivePath)) = DRIVE_FIXED then
        begin
          ComboBox.Items.Add(DrivePath);
        end;
      end;
    end;

  10. #10
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    Merci pour votre aide et désolé pour ma lecture rapide la dernière fois...

    Bonne journée !!

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

Discussions similaires

  1. Filtrer liste des lecteurs et DriveComboBox
    Par Bourak dans le forum Composants VCL
    Réponses: 2
    Dernier message: 16/01/2008, 15h17
  2. [Configuration] Liste des lecteurs
    Par Belegkarnil dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 15/06/2007, 20h18
  3. afficher la liste des lecteurs dans un combobox
    Par mekongboy dans le forum Windows
    Réponses: 1
    Dernier message: 13/10/2006, 11h24
  4. Obtenir la liste des lecteurs d'un PC
    Par coolfecamp dans le forum VBScript
    Réponses: 1
    Dernier message: 05/08/2006, 05h40

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