![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить имя вызываемого метода?
Alex' © (2007-11-12 16:36:00)Пишу:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(MethodName(Sender));
end;
код неработает.
Мессага должна по задумке выдавать "TForm1.Button1Click(Sender: TObject)"
Alex' (2007-11-13 11:55:00) [1]
> С чего бы это было имя формы, модуля в глобальном перехватчике.
Его там и нет. Сделать необходимо.
Anatoly Podgoretsky (2007-11-12 18:36:00) [2]
> Имеем глобальный перехват исключений Application.OnException
>
> Для регистрации исключения необходима дополнительная информация:
>
> МЕТОД вызвавший исключение, имя формы, модуля
С чего бы это было имя формы, модуля в глобальном перехватчике.
Alex' (2007-11-12 17:33:00) [3]Аминь!
Сергей М. (2007-11-12 17:28:00) [4]
> глючило все страшно
И будет глючить ныне и присно и во веки веков.
Нет и не может быть универсального механизма доступа к такой инф-ции.
Alex' (2007-11-12 17:23:00) [5]
> Многое все из вышеперечисленного делается готовыми средствами:
>
>
> http://www.delphi.int.ru/articles/40/
>
> Изобретать велосипед нет никакого резона.
Спасибо!
Давно пробывал, непомню Jedi Code Library конкретно или нет, глючило все страшно и делфи и само приложение после включения Jedi. - посмотрю
Сергей М. (2007-11-12 17:22:00) [6]
> Alex_Ne (12.11.07 17:10) [10]
А завтра Owner'а не будет.
А послезавтра Sender'ом будет вовсе не TButton/
Что тогда ?
Alex' (2007-11-12 17:13:00) [7]
> Че-то не то ты тезка в обработчик запихнул. ИМХО имелось
> в виду что-то вродеShowMessage('T' + (Sender as TButton).
> Owner.Name + '.' + MethodName(@(Sender as TButton).OnClick));
>
То что нужно! Спасибо!
Alex_Ne (2007-11-12 17:10:00) [8]Че-то не то ты тезка в обработчик запихнул.
ИМХО имелось в виду что-то вроде
ShowMessage('T' + (Sender as TButton).Owner.Name + '.' +
MethodName(@(Sender as TButton).OnClick));
Сергей М. (2007-11-12 17:10:00) [9]
> Для регистрации исключения необходима дополнительная информация:
>
> МЕТОД вызвавший исключение, имя формы, модуля
Многое все из вышеперечисленного делается готовыми средствами:
http://www.delphi.int.ru/articles/40/
Изобретать велосипед нет никакого резона.
Alex' (2007-11-12 17:04:00) [10]Извиняюсь за плохо поставленный вопрос.
Задача: Обработать ВСЕ исключительные ситуации приложения.
Имеем глобальный перехват исключений Application.OnException
в не обрабатываем исключения: Делим по классам, номерам сообщений - предпринимаем соответсвующие действия(пишем в логи, делаем скриншоты, шлем по почте, руссифицируем ошибки БД и т.д. и т.п.)
Для регистрации исключения необходима дополнительнаяинформация:
МЕТОДвызвавший исключение, имя формы, модуля
Для того что бы знать имя последнего вызванного метода (в котором может произойти исключение) не придумал, ни чего лучше, как писать его в глобальную переменную. В начале каждого метода писать типа:
procedure TForm1.Button1Click(Sender: TObject);
begin
LastMethodForAppOnException('TForm1.Button1Click(Sender: TObject);');
LastUnitForAppOnException('Unit1');
end;
Сергей М. (2007-11-12 16:54:00) [11]
> Мессага должна по задумке выдавать "TForm1.Button1Click(Sender:
> TObject)"
Задача не имеет универсального решения на все случаи жизни.
Сергей М. (2007-11-12 16:47:00) [12]
> Мне не адрес нужен как таковой, а имя вызывающего метода
> получить
Sender - это адрес объекта.
Просто некоего объекта, вовсе не обязательно вызывающего.
Спрашивается, имя какого метода реальновызывающего объекта ты вознамерился получить таким макаром ? И - опять же - зачемэто имя тебе понадобилось ?
Alex' (2007-11-12 16:45:00) [13]
> И не будет работать, ибо полная ерунда в коде написана -
> интересуешься адресом метода, а сам тычешь параметром адрес
> объекта.
Мне не адрес нужен как таковой, а имя вызывающего метода получить.
Сергей М. (2007-11-12 16:44:00) [14]
> Я и писал "код неработает.". А хотелось бы
А чтобы он работал, нужно соблюсти требования, изложенные в справке.
If Address does not point to a published method of the object, MethodName returns an empty string.
Anatoly Podgoretsky (2007-11-12 16:43:00) [15]> Alex' (12.11.2007 16:36:00) [0]
Что значит не работае?
Напиши ShowMessage('=', + MethodName(Sender));
Alex' (2007-11-12 16:42:00) [16]Не должна, согласен. Я и писал "код неработает.". А хотелось бы... Есть ли работающий способ?
Сергей М. (2007-11-12 16:42:00) [17]Зачем посты плодить одни и те же ?
Чем тебе ветка
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1194870400&n=0
не угодила ?
> код неработает.
И не будет работать, ибо полная ерунда в коде написана - интересуешься адресом метода, а сам тычешь параметром адрес объекта.
homm (2007-11-12 16:39:00) [18]> Мессага должна по задумке выдавать "TForm1.Button1Click(Sender:
> TObject)"
Не должна.