就在那个事件中判断:
用DiskFree()函数,如果返回值是-1,则此盘未准备好。

解决方案 »

  1.   

    有可能捕获不到,是系统的操作。也可以这样试一试:
    接管所有消息处理,替换DriveComboBox的WindowProc属性,可以截获所有消息。在里面try...except试试看
      

  2.   

    我当然知道是try..except,关键是写在哪儿?up
      

  3.   

    确实,这属于操作系统的管辖范围。不知下面的代码对你是否有用:
    var
      Form1: TForm1;implementation{$R *.dfm}var
      OldSelected: integer;procedure TForm1.DriveComboBox1Change(Sender: TObject);
    begin
      try
        {使用此方法可以得到驱动器为准备好的错误代码
        if GetLastError <> 0 then begin
          ShowMessage(Format('Error code: [%d]', [GetLastError]));
        end;//}
        if GetLastError=18 then begin
          Self.DriveComboBox1.ItemIndex := OldSelected;
          Self.DirectoryListBox1.Refresh;
          Self.FileListBox1.Refresh;
        end else begin
          Self.DriveComboBox1.Refresh;
          OldSelected := Self.DriveComboBox1.ItemIndex;
        end;//if
      except  end;
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
      OldSelected := Self.DriveComboBox1.ItemIndex;
    end;end.