Вопрос, поднятый в сообщении на Stack Overflow, связан с обработкой исключений при работе с изображениями в среде разработки Delphi. Пример кода, предоставленный пользователем Chris, успешно загружает изображение из URL, однако в случае отсутствия изображения на указанном адресе приложение не может корректно обработать возникшую ошибку. В данной статье мы рассмотрим, как можно предотвратить такие ситуации, используя механизмы обработки исключений в Object Pascal.
Пример кода, вызывающего ошибку:
procedure TForm1.btn1Click(Sender: TObject);
var
MS : TMemoryStream;
Gif: TGIFImage;
begin
MS := TMemoryStream.Create;
Gif := TGIFImage.Create;
try
IdHTTP1.Get('http://www.google.com/intl/en_ALL/images/logo.gif', MS);
MS.Seek(0, soFromBeginning);
Gif.LoadFromStream(MS);
img1.Picture.Assign(Gif);
finally
Gif.Free;
MS.Free;
end;
end;
Обработка исключений в Delphi:
В Delphi для обработки исключений используется блок try...except. При возникновении ошибки выполнения кода, который находится в блоке try, выполнение программы переходит к блоку except, где можно обработать исключение.
Подход к решению проблемы:
Используем вложенный блок try...except для обработки ошибок, связанных с загрузкой изображения.
Проверяем тип исключения, чтобы определить причину ошибки.
В случае ошибки 404 (Not Found) принимаем соответствующие меры (например, отображаем сообщение об отсутствии изображения).
Для других типов ошибок перезапускаем исключение, чтобы верхний уровень кода мог его обработать.
Исправленный код с обработкой исключений:
procedure TForm1.btn1Click(Sender: TObject);
var
MS : TMemoryStream;
Gif: TGIFImage;
begin
MS := TMemoryStream.Create;
try
Gif := TGIFImage.Create;
try
try
IdHTTP1.Get('http://www.google.com/intl/en_ALL/images/logo.gif', MS);
except
on E: EIdHTTPProtocolException do begin
if E.ErrorCode = 404 then begin
// Обработка ситуации, когда изображение не найдено
// Например, можно отобразить сообщение "Изображение не доступно"
exit;
end else begin
// Обработка других исключений, связанных с сетевыми ошибками
raise;
end;
end;
finally
MS.Seek(0, soFromBeginning);
Gif.LoadFromStream(MS);
img1.Picture.Assign(Gif);
end;
finally
Gif.Free;
end;
finally
MS.Free;
end;
end;
Заключение:
Использование блока try...except позволяет эффективно обрабатывать исключения, возникающие при работе с сетью и внешними ресурсами. Важно корректно обрабатывать различные типы исключений, чтобы обеспечить стабильность и надежность приложения.
Вопрос на Stack Overflow касается проблемы обработки исключений при загрузке изображений в среде разработки Delphi, с предложением решения через использование блоков `try...except` для избежания ошибок, связанных с недоступностью изображений.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.