Форум: "Начинающим";
Текущий архив: 2008.12.07;
Скачать: [xml.tar.bz2];
ВнизException Найти похожие ветки
← →
Andy BitOff (PPC) (2008-10-29 13:37) [0]Дожно ли исключение ESomeError возбужденное в SomeProc() дойти до его обработки в StartProcess?
procedure Tfrm_1.StartProcess();
begin
try
with Tfrm_Progress.Create(Self) do begin
try
...
if ShowModal = mrCancel then begin
Raise ESomeError.Create("Прервано пользователем.");
end;
...
finally
Free;
end;
end;
except
on E: ESomeError do Application.MessageBox(PChar(E.Message), "Сообщение.", MB_ICONSTOP or MB_OK or MB_SYSTEMMODAL);
end;
end;
юнит с Tfrm_Progress
procedure Tfrm_Progress.FormShow(Sender: TObject);
begin
PostMessage(Handle, WM_StartSomeProc, 0, 0); // Собственно, запуск SomeProc()
end;
...
procedure Tfrm_Progress.SomeProc();
begin
try
try
...
except
on E: Exception do begin
case ErrorCode of
eseSomeErrorOne: begin
Raise ESomeError.Create("ля-ля-ля" + #13#10 + E.Message);
end;
eseSomeErrorTwo: begin
Raise ESomeError.Create("ля-ля-ля" + opName + #13#10 + E.Message);
end;
else
Raise;
end;
end;
end;
finally
...
ModalResult := mrOk;
end;
end;
← →
Поросенок Винни-Пух © (2008-10-29 13:41) [1]неа
← →
Сергей М. © (2008-10-29 13:42) [2]Обязано дойти ..
← →
Andy BitOff (PPC) (2008-10-29 13:47) [3]Поросенок Винни-Пух ©
Почему?
← →
Поросенок Винни-Пух © (2008-10-29 13:55) [4]Потому что перевозбуждение условное, а базовое уже обработано.
← →
Поросенок Винни-Пух © (2008-10-29 14:01) [5]... а на наверху ловится только ESomeError.
а внизу по else Raise райзится просто Exception
← →
Сергей М. © (2008-10-29 14:02) [6]
> Поросенок Винни-Пух © (29.10.08 13:55) [4]
А какая разница, перевужбуждено оно или нет ?
Если перевозбуждается именно ESomeError, то оно обязано (как и любое другое) дойти до except-блока в методе StartProcess и там обнаружено фильтром on E: ESomeError do ..
← →
Поросенок Винни-Пух © (2008-10-29 14:04) [7]Если перевозбуждается именно ESomeError,
Вот именно.
А если не перевозбуждается?
← →
Сергей М. © (2008-10-29 14:04) [8]
> а внизу по else Raise райзится просто Exception
А по барабану что там райзится.
Все равно оно дойдет до except-блока в методе StartProcess.
Отсутствие соотв.фильтра в except-блока в методе StartProcess - это другой вопрос
← →
Поросенок Винни-Пух © (2008-10-29 14:05) [9]где гарантия что
case ErrorCode of
пойдет по нужной ветке?
если по ненужной пойдет, то будет просто else raise;
← →
Andy BitOff (PPC) (2008-10-29 14:05) [10]Сергей М. ©
Я тоже так думаю, но не доходит =(
Поросенок Винни-Пух ©
Что почитать, чтобы правилно написать?
← →
Сергей М. © (2008-10-29 14:08) [11]
> Andy BitOff (PPC) (29.10.08 14:05) [10]
Рассказывай, как ты это определил ..
← →
Сергей М. © (2008-10-29 14:11) [12]
> Поросенок Винни-Пух © (29.10.08 14:05) [9]
> то будет просто else raise
Ну и что ?
Все равно оно обязано дойти до обработчика уровнем выше, каким бы оно ни было.
А фильтрация, т.е. ловля конкретно интересующего исключения, - это другой вопрос
← →
Поросенок Винни-Пух © (2008-10-29 14:13) [13]Что почитать, чтобы правилно написать?
А у тебя вообще все это в рамках одной нитки или нет?
Что-то мне внутри меня подсказывает, что procedure Tfrm_Progress.SomeProc(); - это другая нить.
← →
Сергей М. © (2008-10-29 14:15) [14]
> Поросенок Винни-Пух © (29.10.08 14:13) [13]
С какого перепугу ?
← →
han_malign © (2008-10-29 14:15) [15]procedure TWinControl.MainWndProc(var Message: TMessage);
begin
try
try
WindowProc(Message);
finally
FreeDeviceContexts;
FreeMemoryContexts;
end;
except
Application.HandleException(Self);
end;
end;
← →
han_malign © (2008-10-29 14:20) [16]- вообще не возьмусь предсказать реакцию ситемы на исключение в API-шном callback-е (DispatchMessage{user32{WndProc{raise}}}) - скорее всего приложение будет снято...
← →
Поросенок Винни-Пух © (2008-10-29 14:20) [17]С какого перепугу ?
С прастова.
ключевые слова в тексте вопроса "ShowModal" "Progress"
← →
Сергей М. © (2008-10-29 14:23) [18]
> Поросенок Винни-Пух © (29.10.08 14:20) [17]
Нет, я имел ввиду другое - PostMessage отправляет сообщение окну того же потока
← →
Andy BitOff (PPC) (2008-10-29 14:28) [19]Сергей М. ©
Отладчиком. Брэкпоинтами. Результатом.
Поросенок Винни-Пух ©
Если я правильно понял вопрос, то в одной.
Сорри за костноязычностьж Сложно с кпк набирать
← →
Поросенок Винни-Пух © (2008-10-29 14:29) [20]а ну да. не заметил.
но все равно код слишком замудрен и витиеват с этими каскадными возбуждениями.
← →
Сергей М. © (2008-10-29 14:40) [21]
> Andy BitOff (PPC) (29.10.08 14:28) [19]
Тогда, пожалуй, прав han_malign © (29.10.08 14:15) [15] - в этой ситуации исключение направляется прямиком на обработку объектом Application
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.12.07;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.005 c