Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2021, 00:22   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 623
По умолчанию Ошибка при битом PNG файле

Использую юнит из архива

И вот такой вот код:
Код:
procedure PNGLoadBMP(const FName:string; var bmp1:TBitMap);
var
   png: TPNGObject;
begin
  png:= TPNGObject.Create;
  png.LoadFromFile(FName);
  bmp1.Assign(png);
  png.Free;
end;
При наличии битого PGN файла, программа обрывает все действия, из-за чего не получается сделать нормальную обработку ошибки
То есть, программа НЕ совершает действий, которые прописаны после вызова данной процедуры

Попробовал сделать так:
Код:
procedure PNGLoadBMP(const FName:string; var bmp1:TBitMap);
var
   png: TPNGObject;
begin
 try
  png:= TPNGObject.Create;
  png.LoadFromFile(FName);
  bmp1.Assign(png);
 finally
  png.Free;
 end;
end;
Не помогло. Все равно программа впадает в ступор, и НЕ делает действий, которые должны быть после вызова процедуры
Вложения
Тип файла: zip PngComponentsSetup (1).zip (627.0 Кб, 0 просмотров)
Kronos913 вне форума Ответить с цитированием
Старый 16.04.2021, 09:00   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

finally НЕ останавливает "распространение" ошибки.
оно позволяет что-то сделать даже если была ошибка НО затем ошибка распространяется далее.

для "гашения" ошибки используется except c возможностью выбора типа ошибок подлежащих "гашению"
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 16.04.2021 в 09:09.
evg_m на форуме Ответить с цитированием
Старый 16.04.2021, 13:15   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 623
По умолчанию

Сделал вот такой код:
Код:
procedure PNGLoadBMP(const FName:string; var bmp1:TBitMap);
var
   png: TPNGObject;
begin
  png:= TPNGObject.Create;
  try
   png.LoadFromFile(FName);
   bmp1.Assign(png);
  except
             
  end;
  png.Free;
end;
Если выполнять через exe - все отлично. Битый файл условно игнорируется, программа выполняется дальше
Если выполнять через run - в процессе выполнения выскакивает это вот окно
Изображения
Тип файла: png изображение_2021-04-16_130525.png (11.2 Кб, 1 просмотров)
Kronos913 вне форума Ответить с цитированием
Старый 16.04.2021, 13:45   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

https://programmersforum.ru/showpost...7&postcount=10
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка DataSet при загрузке картинки png, в отличии от Query KBO БД в Delphi 3 15.11.2015 20:32
Infix в файле *.png Ципихович Эндрю Софт 1 13.09.2013 20:24
PNG в RES-файле kotzzz Помощь студентам 0 06.01.2012 14:40
Ошибка png компонента при загрузки капчи! DKENT Работа с сетью в Delphi 3 29.11.2010 20:04
ошибка при поиске текста в файле с настройками _Mickey_ Помощь студентам 0 29.12.2009 22:11