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);tryif DiskSize(DrvNum-$40) <> -1 then result := trueelse messagebeep(0);finallySetErrorMode(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(13)+chr(10)+'Повторить?',PChar('Диск '+UpperCase(Drive)),mb_OKCANCEL+mb_iconexclamation{IconQuestion})=idcancel) then beginResult:=false;Break;end;end;finally SetErrorMode(EMode); end; end; |
С уважением, [000076]