Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как проверить готовность диска А

Delphi , Файловая система , Диски

Как проверить готовность диска А

Автор: Галимарзанов Фанис

Девица не готова - device not ready.


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(13) + chr(10) +
        'Повторить?', PChar('Диск ' + UpperCase(Drive)), mb_OKCANCEL +
        mb_iconexclamation {IconQuestion}) = idcancel) then
      begin
        Result := false;
        Break;
      end;
    end;
  finally
    SetErrorMode(EMode);
  end;
end;

Функция Delphi для проверки готовности дискетного устройства!

Оригинальная функция DiskInDrive возвращает false, если дискетное устройство не готово, и только один раз проверяет валидность размера диска. Если диск не готов, она выводит звуковой сигнал.

Обновленная код добавляет цикл, который повторно проверяет размер диска до тех пор, пока он не будет валиден или пользователь не отменит операцию. Она также предлагает пользователю retry с помощью сообщения.

Вот шаг за шагом, что функция делает:

  1. Она конвертирует входной символ дискеты (Drive) в соответствующее устройство (DrvNum) путем вычитания 32 из его ASCII-значения (если дискетное устройство находится в нижнем регистре).
  2. Она настроит режим ошибок для критических ошибок и попытается получить размер диска с помощью DiskSize.
  3. Если размер диска не валиден (-1), она войдет в цикл, который повторно проверяет размер диска до тех пор, пока он не будет валиден.
  4. В каждом шаге цикла она выводит сообщение, запрашивающее пользователя, хочет ли он retry. Если пользователь отменит (нажав на кнопку Отмена), функция вернет false. Иначе, она продолжит проверять размер диска.
  5. Когда размер диска будет валиден или пользователь отменит, функция выйдет из цикла и установит свой результат в конечное значение.

Обновленный код также включает некоторые минорные улучшения:

  • Она инициализирует переменную result в true, что означает, что если функция успешно получит валидный размер диска, она вернет true.
  • Она использует функцию Application.MessageBox для вывода сообщения, которая предоставляет больше гибкости и опций для настройки диалога.

В целом, обновленная функция более robust и пользовательская, чем оригинальная.

Проверить готовность диска А можно с помощью функции DiskInDrive, которая проверяет доступность диска и выводит диалог, если диск не готов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Диски ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 04:04:59/0.0057449340820312/0