Форум: "Начинающим";
Текущий архив: 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