Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.035 c
2-1194789862
SveTTT
2007-11-11 17:04
2007.12.09
Переменная в переменную


15-1193942969
Kerk
2007-11-01 21:49
2007.12.09
MMP может?


15-1194608090
Piter
2007-11-09 14:34
2007.12.09
Пятница? Вася Пупкин?


4-1173175091
szimin
2007-03-06 12:58
2007.12.09
Глобальные хуки в Висте.


11-1180619713
=BuckLr=
2007-05-31 17:55
2007.12.09
Тип string в .Selection





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский