Self - это контекст объекта, иницировавшего вызов. Именно на основании этой информации строится дальнейшее выполнение программы, а знание названия метода приведёт лишь путанице. Выбирать действия нужно не по названию функции, а по информации из
Self.
Если уж совсем приспичило, то можно вызвать примерно так:
- Код: Выделить всё
...
ActionList1_Action1Execute(TObject(1));
...
И обработать в
ActionList1_Action1Execute так:
- Код: Выделить всё
...
case Integer(Self) of
1:...
end;
...
Но лучше завсти
enumГоворя об "архитектурной ошибке" я и имел ввиду, что "Полезное <> имя процедуры". Если у Вас есть полный контекст вызова (Self+Sender), зачем нужно знать статический элемент (имя метода/процедуры), вызвавшего метод?
Попробую объяснить (у меня это плохо получается, но попытка не пытка):
Предположим, Вам нужно знать метод, который вызвал тот или иной Action. Предположим у Вас есть имя, но что даст Вам знание этой функции? Перечислим варианты:
1. Вы сможете написать условный оператор и выполнить специфический код;
2. Вы сможете сохранить это название на будущее, к примеру, для отладки;
3. Вы передадите это название внешнему исполнителю, который перейдёт к выполнению аналогично 1 или 2.
Первый вариант охватывает все варианты использования этой возможности, когда на что-то влияет, второй не будем рассматривать вообще (логировать явно можно перед вызовом обработчика Action), за третий нужно как минимум руки отрывать, если вы пишите прикладные приложения.
Если Вам нужно добавить новый вызов из другой функции - это приводит к тому, что обработчик события нужно править (fail, выкидываем и пишем заного без использования имени процедуры в коде), но, возможно, есть какие-то действия только для вызова из избранных методов, а для всех остальных код выполняется обычным способом. Тогда у Вас есть возможность вызвать этот код до ОБРАБОТКИ Action в том самом методе, который и запустил Action, а можно создать отдельное событие на этот случай, чтобы не гадать о результате выполнения.
Выводы:
1. Необходимость знания названия метода, вызвавшего метод говорит о том, что Вам нужен третий метод, который уже знает, кем он вызван (на самом деле знает, что делать в текущей ситуации) или передать как параметр при вызове;
2. Просто необходимо создать ещё один Action и зарефакторить выделив общий код обработки;
3. Знать и использовать информацию о методе, вызвашем метод в самом методе очень вредно для будующего этого самого метода.