Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.09;
Скачать: CL | DM;

Вниз

Как получить имя вызываемого метода?   Найти похожие ветки 

 
Alex'   (2007-11-12 16:36) [0]

Пишу:
procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(MethodName(Sender));
end;


код неработает.
Мессага должна по задумке выдавать "TForm1.Button1Click(Sender: TObject)"


 
homm ©   (2007-11-12 16:39) [1]

> Мессага должна по задумке выдавать "TForm1.Button1Click(Sender:
> TObject)"

Не должна.


 
Сергей М. ©   (2007-11-12 16:42) [2]

Зачем посты плодить одни и те же ?

Чем тебе ветка

http://delphimaster.net/view/1-1194870400/

не угодила ?


> код неработает.


И не будет работать, ибо полная ерунда в коде написана - интересуешься адресом метода, а сам тычешь параметром адрес объекта.


 
Alex'   (2007-11-12 16:42) [3]

Не должна, согласен. Я и писал "код неработает.". А хотелось бы... Есть ли работающий способ?


 
Anatoly Podgoretsky ©   (2007-11-12 16:43) [4]

> Alex"  (12.11.2007 16:36:00)  [0]

Что значит не работае?
Напиши ShowMessage("=", + MethodName(Sender));


 
Сергей М. ©   (2007-11-12 16:44) [5]


> Я и писал "код неработает.". А хотелось бы


А чтобы он работал, нужно соблюсти требования, изложенные в справке.

If Address does not point to a published method of the object, MethodName returns an empty string.


 
Alex'   (2007-11-12 16:45) [6]


> И не будет работать, ибо полная ерунда в коде написана -
>  интересуешься адресом метода, а сам тычешь параметром адрес
> объекта.

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


 
Сергей М. ©   (2007-11-12 16:47) [7]


> Мне не адрес нужен как таковой, а имя вызывающего метода
> получить


Sender - это адрес объекта.
Просто некоего объекта, вовсе не обязательно вызывающего.

Спрашивается, имя какого метода реально вызывающего объекта ты вознамерился получить таким макаром ? И - опять же - зачем это имя тебе понадобилось ?


 
Сергей М. ©   (2007-11-12 16:54) [8]


> Мессага должна по задумке выдавать "TForm1.Button1Click(Sender:
>  TObject)"


Задача не имеет универсального решения на все случаи жизни.


 
Alex'   (2007-11-12 17:04) [9]

Извиняюсь за плохо поставленный вопрос.

Задача: Обработать ВСЕ исключительные ситуации приложения.

Имеем глобальный перехват исключений Application.OnException

в не обрабатываем исключения: Делим по классам, номерам сообщений - предпринимаем соответсвующие действия(пишем в логи, делаем скриншоты, шлем по почте, руссифицируем ошибки БД и т.д. и т.п.)

Для регистрации исключения необходима дополнительная информация:
МЕТОД вызвавший исключение, имя формы, модуля

Для того что бы знать имя последнего вызванного метода (в котором может произойти исключение) не придумал, ни чего лучше, как писать его в глобальную переменную. В начале каждого метода писать типа:
procedure TForm1.Button1Click(Sender: TObject);
begin
LastMethodForAppOnException("TForm1.Button1Click(Sender: TObject);");
LastUnitForAppOnException("Unit1");
end;


 
Alex_Ne   (2007-11-12 17:10) [10]

Че-то не то ты тезка в обработчик запихнул.
ИМХО имелось в виду что-то вроде
ShowMessage("T" + (Sender as TButton).Owner.Name + "." +
  MethodName(@(Sender as TButton).OnClick));


 
Сергей М. ©   (2007-11-12 17:10) [11]


> Для регистрации исключения необходима дополнительная информация:
>
> МЕТОД вызвавший исключение, имя формы, модуля


Многое все из вышеперечисленного делается готовыми средствами:

http://www.delphi.int.ru/articles/40/

Изобретать велосипед нет никакого резона.


 
Alex'   (2007-11-12 17:13) [12]


> Че-то не то ты тезка в обработчик запихнул. ИМХО имелось
> в виду что-то вродеShowMessage("T" + (Sender as TButton).
> Owner.Name + "." +   MethodName(@(Sender as TButton).OnClick));
>

То что нужно! Спасибо!


 
Сергей М. ©   (2007-11-12 17:22) [13]


> Alex_Ne   (12.11.07 17:10) [10]


А завтра Owner"а не будет.
А послезавтра Sender"ом будет вовсе не TButton/
Что тогда ?


 
Alex'   (2007-11-12 17:23) [14]


> Многое все из вышеперечисленного делается готовыми средствами:
>
>
> http://www.delphi.int.ru/articles/40/
>
> Изобретать велосипед нет никакого резона.

Спасибо!

Давно пробывал, непомню Jedi Code Library конкретно или нет, глючило все страшно и делфи и само приложение после включения Jedi. - посмотрю


 
Сергей М. ©   (2007-11-12 17:28) [15]


> глючило все страшно


И будет глючить ныне и присно и во веки веков.
Нет и не может быть универсального механизма доступа к такой инф-ции.


 
Alex'   (2007-11-12 17:33) [16]

Аминь!


 
Anatoly Podgoretsky ©   (2007-11-12 18:36) [17]


> Имеем глобальный перехват исключений Application.OnException
>
> Для регистрации исключения необходима дополнительная информация:
>
> МЕТОД вызвавший исключение, имя формы, модуля

С чего бы это было имя формы, модуля в глобальном перехватчике.


 
Alex'   (2007-11-13 11:55) [18]


> С чего бы это было имя формы, модуля в глобальном перехватчике.

Его там и нет. Сделать необходимо.



Страницы: 1 вся ветка

Текущий архив: 2007.12.09;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.016 c
3-1185865653
StriderMan
2007-07-31 11:07
2007.12.09
Окна редактирования записей таблиц(справочников)


2-1195190960
outlaw
2007-11-16 08:29
2007.12.09
Файл помощи


15-1194788752
Blind Guardian
2007-11-11 16:45
2007.12.09
векторное произведение векторов с произвольной размерностью


6-1175690109
Мимопроходящий
2007-04-04 16:35
2007.12.09
TWebBowser


1-1190102028
Darvin
2007-09-18 11:53
2007.12.09
Посоветуйте, как реализовать