Главная страница
    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.063 c
2-1194859600
webpauk
2007-11-12 12:26
2007.12.09
Копирование записей


6-1175434020
Lyberzon
2007-04-01 17:27
2007.12.09
Как отправить на печать документ из TWebBrowser?


2-1194703331
addi
2007-11-10 17:02
2007.12.09
Общение с "чужим" приложением.


11-1179405378
danger
2007-05-17 16:36
2007.12.09
Компонент TKOLHTTPDownload


2-1194961617
alll_23
2007-11-13 16:46
2007.12.09
TCanvas





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский