FAQ DelphiConsultez toutes les FAQ

Nombre d'auteurs : 123, nombre de questions : 919, dernière mise à jour : 14 juin 2019  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums Delphi et Delphi et bases de données de www.developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous souhaitez y apporter des corrections ou la compléter, contactez un responsable (lien au bas de cette page).

Nous espérons que cette FAQ saura répondre à vos attentes. Nous vous en souhaitons une bonne lecture.

L'équipe Delphi de Developpez.com.

Commentez


SommaireSystèmeLecteur (5)
précédent sommaire suivant
 

Pour ce faire, il suffit d'utiliser la fonction GetDriveType (IpRootPathName : PChar) : Cardinal de l'unité Windows. Voici une petite routine permettant d'identifier le type d'un lecteur :

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
function DriveType(Drive: String): String; 
begin 
  case GetDriveType(Pchar(Drive)) of 
  DRIVE_REMOVABLE : Result := 'Lecteur de disquette'; 
  DRIVE_FIXED     : Result := 'Lecteur de disque'; 
  DRIVE_REMOTE    : Result := 'Lecteur distant'; 
  DRIVE_CDROM     : Result := 'Lecteur de CD-ROM'; 
  DRIVE_RAMDISK   : Result := 'RamDisk' 
else 
  Result := 'Inconnu'; 
end;
Ainsi par exemple, DriveType('C:\') retournera 'Lecteur de disque'.

Mis à jour le 14 janvier 2014 Gysmo

Lorsque l'on doit écrire sur une disquette ou bien lire un CD, une cartouche ZIP, etc, il est toujours pratique de savoir si l'utilisateur a bien inséré le média en question. Le code qui suit effectue un test en regardant la taille d'espace libre. Donc si le média est absent ou que celui ci n'est pas formaté, la fonction vous renverra la valeur false.

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function DiskInDrive(const Drive: Char): Boolean; 
var 
  DrvNum: Byte; 
  EMode: Word; 
begin 
  Result := False; 
  DrvNum := Ord(Drive); 
  if DrvNum >= Ord('a') then 
    Dec(DrvNum, $20); 
  EMode := SetErrorMode(SEM_FAILCRITICALERRORS); 
  try 
    if DiskSize(DrvNum - $40) <> -1 then 
      Result := True 
  finally 
    SetErrorMode(EMode); 
  end; 
end;

Mis à jour le 18 octobre 2013 atlantis

Il faut utiliser principalement la fonction

Code delphi : Sélectionner tout
mciSendCommand (mciId, uMessage, dwParm1, dwParam2 : Cardinal) : Cardinal
de l'unité MMSystem.
Voici la fonction permettant l'ouverture du tiroir :
Code delphi : Sélectionner tout
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
uses 
  MMSystem; 
  
function OpenCD(Drive: String): Boolean; 
var 
  OpenParm: TMCI_Open_Parms; 
  Flags: DWord; 
  DeviceID : Word; 
  Error: MciError; 
  ErrorText: PChar; 
  LenghtBuffer: Cardinal; 
begin 
  Result := False; 
  Flags := mci_Open_Type or mci_Open_Element; 
  with OpenParm do begin 
    dwCallback := 0; 
    lpstrDeviceType := 'CDAudio'; 
    lpstrElementName := PChar(Copy(Drive, 0, 2)); 
  end; 
  Error := mciSendCommand(0, mci_Open, Flags, Longint(@OpenParm)); 
  mciGetErrorString(Error, ErrorText, LenghtBuffer); 
  if Error = 0 then 
    DeviceID := OpenParm.wDeviceID 
  else 
    raise EAccessViolation.Create(ErrorText); 
  try 
    Error := mciSendCommand(DeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0); 
    mciGetErrorString(Error, ErrorText, LenghtBuffer); 
  finally 
    mciSendCommand(DeviceID, mci_Close, Flags, Longint(@OpenParm)); 
  end; 
    if Error = 0 then 
      Result := True 
    else 
      raise EAccessViolation.Create(ErrorText); 
end;
Pour la fermeture du tiroir, il suffit de remplacer MCI_SET_DOOR_OPEN par MCI_SET_DOOR_CLOSED et ainsi créer une fonction CloseCD.
Si le tiroir s'ouvre/se ferme, la fonction renverra True ; dans le cas contraire, elle déclenchera une exception EAccesViolation.

Mis à jour le 14 janvier 2014 Gysmo

La fonction suivante permet d'obtenir des informations sur un disque :

Code Delphi : Sélectionner tout
1
2
3
4
function GetVolumeInformation(lpRootPathName: PChar; 
  lpVolumeNameBuffer: PChar; nVolumeNameSize: DWORD; lpVolumeSerialNumber: PDWORD; 
  var lpMaximumComponentLength, lpFileSystemFlags: DWORD; 
  lpFileSystemNameBuffer: PChar; nFileSystemNameSize: DWORD): BOOL; stdcall;
Il suffit de passer en paramètre le chemin vers la racine du disque ('C:\'), afin d'obtenir les informations voulues.

Au retour de la fonction :
  • lpVolumeNameBuffer va contenir le nom de volume ;
  • lpFileSystemNameBuffer va contenir le nom du système de fichiers ;
  • lpVolumeSerialNumber va contenir le numéro de série ;
  • lpMaximumComponentLength va contenir la longueur maximale d'un nom de fichier ;
  • lpFileSystemFlags va contenir la listes des états du disque.

Exemple d'utilisation de la fonction :
Code Delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button2Click(Sender: TObject); 
Var VolName     : Array[0..Max_Path]Of Char; 
    FileSysName : Array[0..Max_Path]Of Char; 
    VolSerial   : DWord; 
    FileMaxLen  : DWord; 
    FileFlags   : DWord; 
begin 
  If GetVolumeInformation('C:\',VolName,Max_Path,@VolSerial, 
    FileMaxLen, FileFlags,FileSysName,Max_Path) 
    Then ShowMessage('Nom du disque       :'+VolName 
+#13'Système de fichiers :'+FileSysName 
+#13'Numéro de série     :'+IntToStr(VolSerial)); 
end;

Mis à jour le 18 octobre 2013 Nono40

La fonction GetLogicalDriveList de l'API Windows permet d'obtenir la liste des lecteurs très simplement.

Voici une routine qui illustre son utilisation et qui permet de récupérer une liste de chaînes TStrings contenant tous les lecteurs disponibles.

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
procedure ListeLecteurs(Lecteurs: TStrings); 
var 
  Num: integer; 
  Bits: set of 0..25; 
begin                    
  integer(Bits) := GetLogicalDrives; 
  for Num := 0 to 25 do 
    begin 
    if Num in Bits then 
      Lecteurs.Append(Char(Num+Ord('A'))+':\') 
    end; 
end;
Pour illustrer son utilisation, placez un mémo et un bouton sur une fiche et utilisez le gestionnaire OnClick du bouton comme suit :
Code delphi : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Button1Click(Sender: TObject); 
var 
  i: integer; 
  Lecteurs: TStrings; 
begin 
  Lecteurs := TStringList.Create; 
  ListeLecteurs(Lecteurs); 
  Memo1.Clear; 
  For i := 0 to Lecteurs.Count-1 do 
    Memo1.Lines.Append(Lecteurs[i]); 
  FreeAndNil(Lecteurs); 
end;
Après l'appel de la méthode Button1Click votre mémo contiendra la liste des lecteurs disponibles.

Mis à jour le 24 janvier 2014 dem

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2019 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsables bénévoles de la rubrique Delphi : Gilles Vasseur - Alcatîz -

Partenaire : Hébergement Web