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);
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);
trywhile DiskSize(DrvNum - $40) = -1 dobegin// при неудаче выводим диалогif (Application.MessageBox('Диск не готов...' + chr(13) + chr(10) +
'Повторить?', PChar('Диск ' + UpperCase(Drive)), mb_OKCANCEL +
mb_iconexclamation {IconQuestion}) = idcancel) thenbegin
Result := false;
Break;
end;
end;
finally
SetErrorMode(EMode);
end;
end;
Функция Delphi для проверки готовности дискетного устройства!
Оригинальная функция DiskInDrive возвращает false, если дискетное устройство не готово, и только один раз проверяет валидность размера диска. Если диск не готов, она выводит звуковой сигнал.
Обновленная код добавляет цикл, который повторно проверяет размер диска до тех пор, пока он не будет валиден или пользователь не отменит операцию. Она также предлагает пользователю retry с помощью сообщения.
Вот шаг за шагом, что функция делает:
Она конвертирует входной символ дискеты (Drive) в соответствующее устройство (DrvNum) путем вычитания 32 из его ASCII-значения (если дискетное устройство находится в нижнем регистре).
Она настроит режим ошибок для критических ошибок и попытается получить размер диска с помощью DiskSize.
Если размер диска не валиден (-1), она войдет в цикл, который повторно проверяет размер диска до тех пор, пока он не будет валиден.
В каждом шаге цикла она выводит сообщение, запрашивающее пользователя, хочет ли он retry. Если пользователь отменит (нажав на кнопку Отмена), функция вернет false. Иначе, она продолжит проверять размер диска.
Когда размер диска будет валиден или пользователь отменит, функция выйдет из цикла и установит свой результат в конечное значение.
Обновленный код также включает некоторые минорные улучшения:
Она инициализирует переменную result в true, что означает, что если функция успешно получит валидный размер диска, она вернет true.
Она использует функцию Application.MessageBox для вывода сообщения, которая предоставляет больше гибкости и опций для настройки диалога.
В целом, обновленная функция более robust и пользовательская, чем оригинальная.
Проверить готовность диска А можно с помощью функции DiskInDrive, которая проверяет доступность диска и выводит диалог, если диск не готов.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.