Bonjour à tous !

Depuis quelques jours, je rencontre ce message "Message d'erreur Insérez un disque dans le lecteur \Device\HardDisk\DR" pour l'application que j'ai développé avec Delphi 2005 Studio.

Quande je teste mon programme en dehors de Delphi ou avec Delphi sur mon ordinateur (j'ai VISTA) : pas de problème. Mais je le teste sur d'autres ordinateurs (XP ou VISTA) et en retour j'ai toujours ce message. J'ai été sur le site de Microsoft et lu l'article http://support.microsoft.com/kb/330137/fr
mais cela ne m'apporte pas plus de solution.

Bien que l'article précise que cela peut venir de :
- vous avez un lecteur amovible, tel qu'un lecteur ZIP Iomega, configuré
comme lettre de lecteur C ;
- vous n'avez pas de disque amovible dans le lecteur de disque amovible.

En fait, mon application lit les lecteurs valides à son ouverture et déclenche ce message !

Voici une partie du 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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
procedure TForm1.ChargerListeLecteurs;
 
var
  i, Po : integer;
  Str   : string;
 
begin
  //On récupère les lecteurs...
  ListDrives2(Liste);
 
  //...puis on charge ListeLecteurs
  ListeLecteurs.Clear;
  for i := 0 to Liste.Count - 1 do
  begin
    //Lettre lecteur
    Po  := Pos('|', Liste[i]);
    ListeLecteurs.Items.Add(Trim(Copy(Liste[i], 1, Po - 1)));
  end;
  if ListeLecteurs.Items.Count > 0
  then ListeLecteurs.ItemIndex := 1;
end; //ChargerlisteLecteurs
 
procedure ListDrives2(var Liste : TStringList);
//Renvoie la liste des lecteurs du PC avec ses informations
 
var
  Num     : Integer;
  Bits    : set of 0..25;
  Disque  : string;
 
begin
  Liste.Clear;
  integer(Bits) := GetLogicalDrives;
  for Num := 0 to 25 do
  begin
    if Num in Bits
    then begin
           Disque := Char(Num + Ord('A')) + ':';
           Case GetDriveType(PChar(Disque)) of
               DRIVE_REMOVABLE : if HotPlugInfo(Disque)
                                 then Liste.Add(Drive.Volume + '|' + Drive.Properties + '| Lecteur Amovible' + '|' +
                                                Drive.SystFich + '|' + Drive.TailleLib + '|' + Drive.TailleTot + '|' + Drive.VolumeName);
 
               DRIVE_FIXED     : if HotPlugInfo(Disque)
                                 then Liste.Add(Drive.Volume + '|' + Drive.Properties + '| Disque externe amovible' + '|' +
                                                Drive.SystFich + '|' + Drive.TailleLib + '|' + Drive.TailleTot + '|' + Drive.VolumeName)
                                 else Liste.Add(Drive.Volume + '|' + Drive.Properties + '| Disque dur' + '|' +
                                                Drive.SystFich + '|' + Drive.TailleLib + '|' + Drive.TailleTot + '|' + Drive.VolumeName);
 
               DRIVE_CDROM     : if HotPlugInfo(Disque)
                                 then Liste.Add(Drive.Volume + '|' + Drive.Properties + '| Lecteur CDROM/DVDROM' + '|' +
                                                Drive.SystFich + '|' + Drive.TailleLib + '|' + Drive.TailleTot + '|' + Drive.VolumeName)
           end;
    end;
  end;
end; //ListDrives2
Je rajoute que le message d'erreur ne s'affiche que sur les lecterus CDROM ou amovibles ! Appeler par ce code quand l'utlisateur clique sur la liste (TListBox) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
procedure TForm1.ListeLecteursClick(Sender: TObject);
 
begin
 if ListeLecteurs.ItemIndex <> - 1
 then ChargerLecteur(ListeLecteurs.Items[ListeLecteurs.ItemIndex]);
end; //ListeLecteursClick
J'ai testé aussi avec une version trial de Delphi 2010, j'ai aussi ce problème !

Avez-vous une idée à ce sujet ?

Merci de votre aide

Cordialement