Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2012, 13:31   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Как узнать имя события/функции, которое было выполенно в Run Time?

Добрый вечер! Поясню вопрос. Есть кнопка и у нее имеется обработчика события, например, OnClick и OnChange. Каждый из них содержит какой-то заранее написанный код. Как можно, программно, во время работы программы, узнать имя того обработчика, который был выполнен последним? Что-то типа если нажали на кнопку, то показалось бы сообщение с именем обработчика. Возможно ли такое сделать?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 07.09.2012, 13:41   #2
HellMercenariess
Форумчанин
 
Аватар для HellMercenariess
 
Регистрация: 27.07.2009
Сообщений: 547
По умолчанию

Возможностей компонента TAppEvents недостаточно?
"Виновник этого парада,он не дурак, ушел как надо!" Похороны панка.
HellMercenariess вне форума Ответить с цитированием
Старый 07.09.2012, 13:43   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Например каждый обработчик пишет в лог некоторую инфу. Типа своё имя, время вызова, имя, тип компонента который его вызвал. Читать лог и показывать то что нужно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.09.2012, 13:45   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Возможностей компонента TAppEvents недостаточно?
Честно? Я ни разу не использовал за 5 лет этот компонент. Посмотрю и почитаю про него. Есть примеры как он работает?
Цитата:
Например каждый обработчик пишет в лог некоторую инфу. Типа своё имя, время вызова, имя, тип компонента который его вызвал. Читать лог и показывать то что нужно
А если компонент создается динамически и ему также назначается событие?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 07.09.2012, 13:53   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
А если компонент создается динамически и ему также назначается событие?
Обычно обработчики через Sender или аналог знают кто к ним обратился
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.09.2012, 14:42   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Можешь пример кода как через, например, Sender, показать?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 07.09.2012, 14:56   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Так например
Код:
  if Sender<>nil then begin
    s:=Format('ClassName=%s',[Sender.ClassName]);
    if Sender is TComponent then s:=s+Format(', Name=%s',[TComponent(Sender).Name]);
  end
  else s:='nil';
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.09.2012, 15:56   #8
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Возможно ли такое сделать?
Возможно.

Как именно - зависит от того, зачем это надо и в какой мере нужно покрыть код.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 07.09.2012, 17:01   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Всякие перехватчики исключений, типа MadExcept, EurekaLog, FastMM при ошибке выводят стэк данных с указанием имен, смещений, строк и места ошибки во всем этом.
Человек_Борща вне форума Ответить с цитированием
Старый 07.09.2012, 17:58   #10
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Аватар, твой код тоже мне интересен кстати. Однако, он выдает имя класса компонента и его имя. Мне нужно, чтобы он показал имя события, которое выполнилось. Например: "Выполнено событие = OnClick". Это возможно сделать?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как run-time создать от руки компонент? SovereignSun Общие вопросы Delphi 12 23.11.2011 16:30
Создание run-time TLabel как в Delphi? SovereignSun Общие вопросы Delphi 0 22.11.2011 16:30
Как создать TPageControl в run-time tonatas Общие вопросы Delphi 4 13.08.2010 22:57
обработчик события onClose для формы созданной в Run-Time tonatas Общие вопросы Delphi 3 13.08.2010 21:46
Как отловить события которое вызывается при розворачивании подменющек (PopupMenu) DarkEvil Общие вопросы Delphi 9 09.05.2009 18:17