FAQ DelphiConsultez toutes les FAQ
Nombre d'auteurs : 124, nombre de questions : 934, dernière mise à jour : 23 octobre 2024 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.
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; |
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; |
Il faut utiliser principalement la fonction
Code delphi : | Sélectionner tout |
mciSendCommand (mciId, uMessage, dwParm1, dwParam2 : Cardinal) : Cardinal
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; |
Si le tiroir s'ouvre/se ferme, la fonction renverra True ; dans le cas contraire, elle déclenchera une exception EAccesViolation.
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; |
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; |
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; |
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; |
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 çaLes 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 © 2024 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.