Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка raise исключения 
:(
    Опции темы
zedx
Дата 30.9.2008, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Подскажите как пропустить сообщение с ошибкой? Выполняю функцию по извлечению из архива Zlib. Извлекается несколько тыщ. файлов в пакетном режиме. Бывает, что Zlib возвращает ошибки: "data error" или "bufer error" и при этом обработка прерывается... а не надо бы... ошибки не столь критичны, чтоб прерывать весь процесс.
Пробывал заключать функцию распаковщика в блок try  exept (и в try Finally) 
Код
try
ZDecompress(buf_in, size_in, buf_out, size_out,size_out); 
except
on E : Exception do
end;


Не помогает. Всегда выкидывает сюда (в модуле ZLIBEX.pas):

Код
function ZDecompressCheck(code: Integer): Integer;
begin
  Result := code;

  if code < 0 then
  begin
    raise EZDecompressionError.Create(_z_errmsg[2 - code]); // - вот сюда выбрасывает -
  end; 
end;

Посоветуйте?


Это сообщение отредактировал(а) zedx - 30.9.2008, 21:43
PM MAIL   Вверх
THandle
Дата 30.9.2008, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Чтоб в среде не выкидывало на эту строчку поставь в появившемся окошке галочку рядом с "Ignore this exception type".
Просто во время работы программы соответствующе обрабатывай этот тип исключений, так как при других возможно надо будет что то делать другое. Обрабатывай так:

Код

on E: EZDecompressionError do
  //..

PM   Вверх
zedx
Дата 30.9.2008, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Оперативно, спасибо.
Да, точно, выбрасывает только в обработчике, я как-то exe не сообразил сразу запустить)
PM MAIL   Вверх
Kbl4AH
Дата 11.1.2009, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 4
Всего: 15



Не стал создавать новую тему, спрошу здесь.
Нужно ввести с клавиатуры целое неотрицательное число в инпутбокс.
Как правильно это реализовать?
Сделал так:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  InputValue: Integer;
begin
  try
    InputValue := StrToInt(InputBox('Новое число', 
                                    'Введите целое неотрицательное число', ''));                                
    if InputValue < 0 then 
      raise Exception.Create('');     
  except 
    on E: Exception do
      ShowMessage('Повторите ввод');
  end;
end;

PM MAIL ICQ   Вверх
Frees
Дата 11.1.2009, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 16
Всего: 54



Kbl4AH, можно вот так, без исключений обойтись
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  InputValue: Integer;
begin
  if not TryStrToInt(InputBox('Новое число',
    'Введите целое неотрицательное число', ''), InputValue) or (InputValue < 0) then
    ShowMessage('Повторите ввод');
end;


Добавлено через 3 минуты и 44 секунды
только если в InputBox отмена нажать то всеравно "Повторите ввод" выскочит



--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Kbl4AH
Дата 11.1.2009, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 4
Всего: 15



Спасибо, Frees. 
PM MAIL ICQ   Вверх
Kbl4AH
Дата 11.1.2009, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 4
Всего: 15



Цитата(Frees @  11.1.2009,  09:55 Найти цитируемый пост)
только если в InputBox отмена нажать то всеравно "Повторите ввод" выскочит

это плохо(((
PM MAIL ICQ   Вверх
THandle
  Дата 11.1.2009, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Kbl4AH, используй InputQuery, она возвращает результат об успешности ввода текста(true or false).
PM   Вверх
Kbl4AH
Дата 11.1.2009, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 4
Всего: 15



Спасибо, THandle.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.