Проверка готовности диска А: (вариант 2)
|
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 else messagebeep(0); finally SetErrorMode(EMode); end; end; Дополнение от читателя: ...можно для пущей функциональности добавить ряд строк: function DiskInDrive(const Drive: char): Boolean; var DrvNum: byte; EMode: Word; begin result := true; // было false DrvNum := ord(Drive); if DrvNum >= ord('a') then dec(DrvNum,$20); EMode := SetErrorMode(SEM_FAILCRITICALERRORS); try while DiskSize(DrvNum-$40) = -1 do begin // при неудаче выводим диалог if (Application.MessageBox('Диск не готов...'+chr(1310)+ 'Повторить?',PChar('Диск '+UpperCase(Drive)),mb_OKCANCEL+ mb_iconexclamation{IconQuestion})=idcancel) then begin Result:=false; Break; end; end; finally SetErrorMode(EMode); end; end; |