Страница 1 из 1

Как проверить ошибку в DriverComboBox

Добавлено: 13 дек 2005, 22:26
Viktor Zull
Если в DriverComboBox выбрать например диск A, когда в нем нет дискеты, то вылетает сначало сообщение о том что диска нет, а потом ошибка I/O error 21. Как можно проверить это условие.

Я пишу в OnChange: if DiskSize(0)=-1 then Application.messageBox(...)
но это не проходит всеравно системная ошибка вылетает, как ее отключить?

Точно знаю что можно эту штуку провернуть, получалось когда-то, а теперь забыл как делал. Напомните мне.

Добавлено: 13 дек 2005, 23:49
Duncon

Код: Выделить всё

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
      begin
        Result := false;
        Break;
      end;
    end;
  finally
    SetErrorMode(EMode);
  end;
end;
[/color]