Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как обработать исключение в чужой функции?


fzt ©   (2011-08-17 10:43:00) 

Hi
Как подавить/обработать чужую обработку ошибки?
procedure A;
begin
try
<raise error here>
except
 on Err: Exception do ShowMessage('Err');
end;
end;

Procedure My;
begin
A;
end;

Мне требуется не меняя код процедуры A, обработать ошибку без вываливания пользователю нага. Как?


_Юрий   (2011-08-17 13:54:00) [1]

В данном случае правильное решение - каким то образом заставить автора процедуры "A" убрать из нее говнокод. В противном случае вы получите уже два говнокода вместо одного.


Anatoly Podgoretsky   (2011-08-17 12:49:00) [2]

> fzt  (17.08.2011 12:14:14)  [14]

> Мне нужно перехватить исключение, или изменить способ оповещения о нём.

> За организацию процесса разработки другим людям деньги платят.


Ega23   (2011-08-17 12:28:00) [3]


>  Отлаженный десятилетием процесс.


> Мне после коммита каждому по почте компоненту отправить?
> Не пойдёт, будут тонны срача вместо работу работать.


Отлично отлаженный процесс. Имея на руках исходник и (судя по коммиту) SVN - компонент надо по почте рассылать.


Игорь Шевченко   (2011-08-17 12:20:00) [4]

fzt   (17.08.11 12:14) [14]

Я же не вижу, что у тебя в руках. А имея исходник, задавать такой вопрос, как ShowMessage запретить, несколько странно, не правда ли ? Поправил исходник ОДИН РАЗ и все довольны


fzt   (2011-08-17 12:14:00) [5]

2 Игорь Шевченко, угу.. и стесняюсь имея исходник на руках его подправить.
То что дураку понятно, логику нужно доказывать ©

2 Ega23Когда в руках молоток - всё кажется гвоздями? Отлаженный десятилетием процесс. Мне его менять ни резона, ни хоть какого-то желания. Замечание не по адресу.

Смысл работы - материальные блага в обмен на мою узкую специализацию.
За организацию процесса разработки другим людям деньги платят.

Мне нужно перехватить исключение, или изменить способ оповещения о нём.
Если разраб компоненты любит наги, которые пользователь должен читать на не родном языке да ещё и промаргивать - его дело. Я их предпочитаю в лог файлы собирать например.


Юрий Зотов   (2011-08-17 12:05:00) [6]

> fzt   (17.08.11 11:21) [9]
> заменил на время на вызов пустышки и всё..
> я просто хз как это на дельфи сделать

В модуле с процедурой A:

1. В секции interface объявляем переменную
var
 AllowShowMessage: boolean = true;


2. В секции implementation перед процедурой A вставляем заглушку:
procedure ShowMessage(S: string);
begin
 if AllowShowMessage then
   Dialogs.ShowMessage(S)
end;


Теперь, управляя извне переменной AllowShowMessage, можем запрещать или разрешать выдачу сообщения.


Ega23   (2011-08-17 12:00:00) [7]


> Имя нам - Легион разработчиков..
> Мне после коммита каждому по почте компоненту отправить?


Имя вам - Легион школоты, коль скоро процесс разработки такой "странный".


Игорь Шевченко   (2011-08-17 11:52:00) [8]

а ShowMessage ('вы используете триальную версию') не иначе


Andy BitOff   (2011-08-17 11:37:00) [9]

Вот, ели Розыч заглянет и сочтет нужным тебе чего-то объяснить, то шанс есть. Иначе тебе на хакер.ru =)


fzt   (2011-08-17 11:21:00) [10]

Имя нам - Легион разработчиков..
Мне после коммита каждому по почте компоненту отправить? =(
Не пойдёт, будут тонны срача вместо работу работать.

Блин.. вызов процедуры - 6 байт, ShowMessage - она особенная что-ли?
заменил на время на вызов пустышки и всё.. я просто хз как это на дельфи сделать


Ega23   (2011-08-17 11:17:00) [11]


> А - сторонний компонент =(


И что такого? Возьми и перепиши.


fzt   (2011-08-17 11:12:00) [12]

А - сторонний компонент =(


Ega23   (2011-08-17 11:11:00) [13]

Лучше перепиши А.


Ega23   (2011-08-17 11:10:00) [14]


> реализуемо?


Нет.


fzt   (2011-08-17 11:09:00) [15]

А как-то подавить на время вызов ShowMessage можно?..
допустим что-то вроде
OldPTR:=ShowMessage;
ShowMessage:=@EmptyProc;
<bad code here>
ShowMessage:=@OldPTR;

реализуемо?


Palladin   (2011-08-17 10:55:00) [16]

никак


oldman   (2011-08-17 10:54:00) [17]

Я фигню написал!!!


oldman   (2011-08-17 10:52:00) [18]


> не меняя код процедуры A


А ведь именно он и неверный!
ShowMessage в нем не появиться никогда.


Наверх

Титульная страница Поиск, карта сайта Написать письмо