Доп.функционал на стандартный обработчик

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Доп.функционал на стандартный обработчик

Сообщение Maverick »

Добрый день.
Интересует вопрос следующего плана.

возможно ли на обработку стандартного события, ДО или ПОСЛЕ выполнения стандартного ф-ла, выполнить свой? т.е. существуют ли сейчас POST и PRE- методы?!

если да, то каким образом?

подскажите )))

или реализация на каком либо событии собственного ф-ла и является по сути post-методом? т.е. выполнение его всегда будет ПОСЛЕ выполнения на данном событии стандартной обработки?
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Re: Доп.функционал на стандартный обработчик

Сообщение Vik »

А так не устроит:
1)

Код: Выделить всё

  ...
cmInit :
{
   <свой код>
   
   if (Inherited :: HandleEvent (cmInit) != heOk)
     Abort;
}
  ...
2)

Код: Выделить всё

  ...
cmInit :
{
  
   if (Inherited :: HandleEvent (cmInit) = heOk)
     {
        <свой код>
     }
}
  ...
?
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

т.е. по сути 1) pre- , а 2) post- метод?

1) работоспособность проверялась или это просто теоретические умозаключения?
2) где почитать можно?

буду благодарен ))
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Сообщение Vik »

По сути да.
Проверялось - работает.
А почитать можно все там же - vipprog.chm - "Расширение обработчиков событий"
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

огромный гранд мерси...
буду попробовать :-)
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Сообщение Vik »

И еще, к этому : "или реализация на каком либо событии собственного ф-ла и является по сути post-методом? т.е. выполнение его всегда будет ПОСЛЕ выполнения на данном событии стандартной обработки?". Если вы переопределите обработчик какого-либо события и в вашем коде явно не вызовете родительский обработчик этого события, то своим функционалом вы перекроете стандартный, то есть, стандартный функционал вообще не отработает :)
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

ммм.. так.. поподробнее тогда... как одновременно заставить отработать и собственный код и стандартный родительский?

задача такова:

при добавлении спецификации ДО нужно помимо стандартных пересчетов добавить свой кусок, который бы тоже кое-что рассчитывал.
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

Простой пример:

Код: Выделить всё

1. Выполнение своего кода до:
cmInit :
{
 MyProcedure;
 Inherited::HandleEvent (cmInit);
}

2. Выполнение своего кода после:
cmInit :
{
 Inherited::HandleEvent (cmInit);
 MyProcedure;
}

2. Выполнение своего кода вместо:
cmInit :
{
 MyProcedure;
}
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

Ребят, спасибо за разжёвывание )))
век живи - век учись :-)
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

Maverick
Самое главное что это работает :)
Также через докомпиляцию можно расширять лог.таблицу, перекрывать паблик-методы, расширять FR-потоки (с 26-го атлантиса), перекрывать визуальные части.
Но надо помнить, что повторная докомпиляция перекрывает полностью предыдущие.
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Сообщение Vik »

Maverick писал(а):ммм.. так.. поподробнее тогда... как одновременно заставить отработать и собственный код и стандартный родительский?
.
" Inherited :: HandleEvent (cmInit) " - это и есть вызов родительского обработчика события cmInit
timaskraft
Сообщения: 17
Зарегистрирован: 21 май 2008, 11:03
Откуда: Витебск

Сообщение timaskraft »

Подскажите пожалуйста, tableevent можно докомпилировать?
к примеру

Код: Выделить всё

alter interface KATPARTY
tableevent table katparty
cmCheckRecord:    {
	            if katparty.cmc=0
                    {
					  message('Привяжите  МЦ  к партии или удалите запись!');
					  abort;
					}
                else
					{
                              // ***** как вызвать  стандартный tableevent cmCheckRecord ???
 					}
				  }
 end;
end.
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

inherited::handleEvent(cmCheckRecord)
timaskraft
Сообщения: 17
Зарегистрирован: 21 май 2008, 11:03
Откуда: Витебск

Сообщение timaskraft »

galover писал(а):inherited::handleEvent(cmCheckRecord)
Пытался писать inherited::TABLEEvent(cmCheckRecord) - компилятор не пропускал.
inherited::handleEvent(cmCheckRecord) - сработал

Спасибо! :cool:
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

есть такое, тоже методом тыка обнаружил
Ответить