CallStack Delphi

Temoxa

Турист
Ребята как отловить все события , которые происходят в проекте? (Нажатие клавиш, открытие окон) И вывести это на отдельную форму, чтобы можно было смотреть какую кнопку я нажал сейчас, какое окно подвинуЛ?

пробовал разобраться с ApplicationEvents.... не добил.

Помогите советом плз.
 

LeshaRB

Завсегдатай
Staff member
Moderator
покапайся на delphisource.ru
Есть книга delphi руковдсто разработчика марко канту
Там целая глава посвящена этому
 

Temoxa

Турист
Было б время для решения задачи, я сюда не писал бы)

Хочу в рабочем проекте собрать статистику, о том какие кнопки вообще не юзатся пользователями, и какие формы тоже не открываются...

Чтобы не прописывать метод логирования в каждом методе открытия окна или нажатия кнопки, хочу через события все отлавливать и складывать в бд, через месяц посмотреть что юзается)))

Мб готовое что - то есть?))
 

maxim220

Турист
Хорошее дело вы задумали :), все через это проходят. Мы - тоже проходили. Выяснилось, что никто и никогда статистику не смотрит. А делали мы все руками - факт открытия формы и факт выполнения запроса. Реализуется в виде 2-х таблиц - сеансы и деталировка.
 

LeshaRB

Завсегдатай
Staff member
Moderator
Хорошее дело вы задумали :), все через это проходят. Мы - тоже проходили. Выяснилось, что никто и никогда статистику не смотрит. А делали мы все руками - факт открытия формы и факт выполнения запроса. Реализуется в виде 2-х таблиц - сеансы и деталировка.
Так может сырцы дашь, а не балоболить?
В джава есть понятие перехвтчики, тут не знаю
 

LeshaRB

Завсегдатай
Staff member
Moderator
через месяц посмотреть что юзается)))
У меня правда один вопрос, а зачем?
Есть кнопка отчет за квартал по лоигке она и будет юзаться раз в квартал...

А допусти ежедноевное обновление если не автомам, то и каждый день будет юзаться
 

LeshaRB

Завсегдатай
Staff member
Moderator
В Java есть, перехватичики, думаю в последних версиях Delphi должно появиться что-то такое

@Loggable
public class BookService {

@Inject
@ThirteenDigits
private NumberGenerator numberGenerator;

public Book createBook(String title, BigDecimal price, String description) {
Book book = new Book(title, price, description);
book.setIsbn(numberGenerator.generateNumber());
return book;
}
}

@InterceptorBinding
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface Loggable {
}

@Interceptor
@Loggable
public class LoggingInterceptor {
@Inject
private Logger logger;

@AroundInvoke
public Object logMethod(InvocationContext ic) throws Exception {
logger.entering(ic.getTarget().getClass().getName(), ic.getMethod().getName());
try {
return ic.proceed();
} finally {
logger.exiting(ic.getTarget().getClass().getName(), ic.getMethod().getName());
}
}
}

public class LoggingProducer {
@Produces
public Logger produceLogger(InjectionPoint injectionPoint) {
return Logger.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
}
}
 

JCDenton

Турист
В топике написано "Call Stack". Вопрос: как это соотносится с "отловить все события , которые происходят в проекте? (Нажатие клавиш, открытие окон) И вывести это на отдельную форму, чтобы можно было смотреть какую кнопку я нажал сейчас, какое окно подвинуЛ?"

Это как бы разные вещи.

Если нужен логгер событий - юзай логгер. Что угодно - от OutputDebugString, до SmartInspect.
Если нужен стек вызовов - юзай трассировщики. Как правило, они цепляются на исключения, но допускают ручной вызов в произвольный момент времени. JCL (JEDI Code Library, см. модуль JclDebug), EurekaLog, madExcept.
 
Top