type
TDriveType = (dtUnknown, dtNoRootDir, dtRemovable, dtFixed, dtRemote, dtCdrom, dtRamDisk);
TDriveTypes = set of TDriveType;
function GetDriveType(ADrive: Char): TDriveType;
var
WinDriveType: UINT;
begin
WinDriveType := Windows.GetDriveType(PChar(LowerCase(ADrive+':\')));
case WinDriveType of
DRIVE_UNKNOWN: Result := dtUnknown;
DRIVE_NO_ROOT_DIR: Result := dtNoRootDir;
DRIVE_REMOVABLE: Result := dtRemovable;
DRIVE_FIXED: Result := dtFixed;
DRIVE_REMOTE: Result := dtRemote;
DRIVE_CDROM: Result := dtCdrom;
DRIVE_RAMDISK: Result := dtRamDisk;
else Result := dtUnknown;
end; //case
end;
//refreshs the drive list
//FMountedDrivesOnly: if True then disk must be in drive
//DriveTypes: a set of drivetypes you want in the list, so you can e.g. filter for only removable drives
procedure TFSICustomDriveComboBox.RefreshDriveList;
var
C: Char;
ADriveType: TDriveType;
begin
if (csDesigning in ComponentState) then
Exit;
Items.Clear;
for C in GetAvailableDrives(FMountedDrivesOnly) do
begin
ADriveType := GetDriveType(C);
if ADriveType in DriveTypes then
Items.Add(C + ':\');
end;
if FSelectFirstDriveOnRefreshDriveList and (not DroppedDown) and (Items.Count > -1) then
ItemIndex := 0;
end;