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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2016, 20:59   #1
factually
Пользователь
 
Регистрация: 24.10.2016
Сообщений: 21
По умолчанию Try > Except > End; - не обрабатывает ошибку.

Программа скачивает картинку и иногда картинка скачивается пустой, в связи с этим возникает исключение с ошибкой "jpeg error #42". Пытаюсь отловить ошибку используя Try, но ничего не выходит и ошибка всё равно "ломает" программу.

Код:
 Try
 ava:=parser(response,'<img src="https://steamcdn-a.akamaihd.net/','" id="avatar"/>');
 path:=ExtractFilePath(ParamStr(0))+'ava.jpg';
 DwFi('https://steamcdn-a.akamaihd.net/'+ava,path);
 Form4.sImage1.Picture.LoadFromFile('ava.jpg');
 SysUtils.DeleteFile('ava.jpg');
 except
  Form4.lbl14.Caption:='Не  удалось'+#13#10+' загрузить аватарку';
 end;
factually вне форума Ответить с цитированием
Старый 24.10.2016, 21:37   #2
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
Подмигивание

На просторах "великого и необъятного" есть такая функция :
PHP код:
function FileSize(fileName wideString) : Int64;
 var  
sr TSearchRec;
 
begin
   
if FindFirst(fileNamefaAnyFilesr ) = 0 then 
      result 
:= Int64(sr.FindData.nFileSizeHighshl Int64(32)+Int64(sr.FindData.nFileSizeLow)
   else 
result := -1;
   
FindClose(sr);
 
end
Используйте ее перед вашими :
PHP код:
 Form4.sImage1.Picture.LoadFromFile('ava.jpg');
 
SysUtils.DeleteFile('ava.jpg'); 
т.е. когда уже известно имя файла и он якобы загружен, на предмет величины файла отличной от нуля.
Так избавитесь от ошибки.
И исходя из нулевого размера, к примеру, что-то предпримите...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 24.10.2016, 21:44   #3
factually
Пользователь
 
Регистрация: 24.10.2016
Сообщений: 21
По умолчанию

Я знаю, что можно так решить проблему, но всё же хочется узнать почему Try в данном случае не обрабатывает ошибку.

Последний раз редактировалось Alex11223; 24.10.2016 в 21:48.
factually вне форума Ответить с цитированием
Старый 24.10.2016, 21:47   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А как ошибка выглядит? Смотрите исходники модуля jpeg, может оно и не кидает исключения.

Или может вы просто запускаете с отладчиком? по умолчанию дельфи вроде останавливает на исключениях при отладке.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 24.10.2016 в 21:51.
Alex11223 вне форума Ответить с цитированием
Старый 24.10.2016, 22:05   #5
factually
Пользователь
 
Регистрация: 24.10.2016
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А как ошибка выглядит? Смотрите исходники модуля jpeg, может оно и не кидает исключения.

Или может вы просто запускаете с отладчиком? по умолчанию дельфи вроде останавливает на исключениях при отладке.
Так:


Программу запускаю без отладчика(отдельно от дельфи).

Ошибка при дебаге:


И почему из-за этой ошибки все элементы на форме обводятся в белый цвет?

Последний раз редактировалось factually; 24.10.2016 в 22:11.
factually вне форума Ответить с цитированием
Старый 24.10.2016, 22:23   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
Form4.sImage1.Picture.LoadFromFile('ava.jpg');
Исключение возможно при прорисовке возникает, а не здесь. Попробуй после этой команды сразу принудительно прорисовать, типа Form4.sImage1.Refresh или чего там для имеджа
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.10.2016, 22:31   #7
factually
Пользователь
 
Регистрация: 24.10.2016
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
Form4.sImage1.Picture.LoadFromFile('ava.jpg');
Исключение возможно при прорисовке возникает, а не здесь. Попробуй после этой команды сразу принудительно прорисовать, типа Form4.sImage1.Refresh или чего там для имеджа
Исключение возникает, только если файл пустой, т.е. не скачался. refresh не дало результат
factually вне форума Ответить с цитированием
Старый 24.10.2016, 22:57   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ошибка не в этом блоке все равно. Пробуй так, ток ошибку нормально обработай
Код:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure ApplicationException(Sender: TObject; E: Exception);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ApplicationException(Sender: TObject; E: Exception);
begin
  ShowMessage('ошибка2');
end;

procedure TForm1.Button1Click(Sender: TObject);
var JPG: TJpegImage;
begin
  Application.OnException:=ApplicationException;
  JPG:= TJpegImage.Create;
  try
    try
      JPG.LoadFromFile('e:\abc.jpg');
      Image1.Picture.Assign(JPG);
    finally
      JPG.Free;
    end;
  except
    ShowMessage('ошибка1');
  end;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 24.10.2016 в 22:59.
Аватар вне форума Ответить с цитированием
Старый 24.10.2016, 23:58   #9
factually
Пользователь
 
Регистрация: 24.10.2016
Сообщений: 21
По умолчанию

Аватар, ага, теперь работает, спасибо
Еще одна проблема возникла: если свернуть и развернуть приложение (кликнуть по его иконке, а не по кнопке Minimize), тогда изображение исчезает, а заместо него белый квадрат, кроме этого исчезает текст в эдитах до тех пор, пока не наведешь на него курсор.
Если просто нажать кнопку Minimize и развернуть приложение, тогда проблема не возникает.
С основной формой (form1) такой проблемы нет.
factually вне форума Ответить с цитированием
Старый 25.10.2016, 00:06   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Так а почему оно должно обрабатывать ошибку когда вы её и не ловите?
Код:
try

except
  on E:Exception do
  begin
    //Теперь ловите
  end;
end;
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Python. В чем отличие Entry.delete(0, END) от Entry.delete(0.0, END) и еще вопрос pompiduskus PHP 4 12.08.2014 23:17
Сервис не обрабатывает if delias Общие вопросы .NET 1 21.03.2011 12:07