![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли внутри функции получить её имя?
Ega23 © (2004-06-23 11:16:00)Т.е. пример:
procedure TEditItem.SetFDefaultValue(const Value: Variant);
begin
inherited;
try
FEdit.Text:=String(Value);
except
raise DPException.Create('TEditItem.SetFDefaultValue');
end;
end;
А вот как-нибудь без такой 'TEditItem.SetFDefaultValue' строки обойтись можно? Что-нить, типа Self. ?
Тимохов (2004-06-23 14:31:00) [1]
> Ega23 © (23.06.04 14:29) [17]
знаешь, я сам не знаю :))) т.к. никогда не пользовался indy, но знаю, что это общеизвествная библиотека, которой очень многие пользуются :)
Digitman (2004-06-23 14:30:00) [2]
> evvcom © (23.06.04 14:25) [16]
> А procedure Assert не подойдет?
нет, вряд ли ..
автор же хочет, imho, свою лажу отслеживать в ран-тайм автоматически, без модификации программы на предмет размещения отладочных операторов в "узких" местах ...
Тимохов (2004-06-23 14:30:00) [3]assert всем хороша, за исключением того, что компилятор дельфи не расценивает ее как возбуждение исключения и дает предупреждение в след. случае:
function a(param: integer);
begin
if param = 0 then result := ... else assert('error');
end;
а вот здесь не будет warning
function a(param: integer);
begin
if param = 0 then result := ... else raise exception.create('error');
end;
Ega23 (2004-06-23 14:29:00) [4]Тимохов © (23.06.04 14:19) [15]
Это которая в D6 - D7 отдельной вкладкой идёт?
evvcom (2004-06-23 14:25:00) [5]А procedure Assert не подойдет?
Тимохов (2004-06-23 14:19:00) [6]
> Ega23 © (23.06.04 14:13) [14]
this is commonly known delphi package library
Ega23 (2004-06-23 14:13:00) [7]Инди - What is it?
Digitman (2004-06-23 13:59:00) [8]
> Ega23 © (23.06.04 13:36) [11]
в пакете Инди есть соответствующая утилита, ведущая протокол вызовов
Sandman25 (2004-06-23 13:42:00) [9][11] Ega23 © (23.06.04 13:36)
Type
TMyProc = procedure (var Param) of object;
procedure DoWithException(MyProc: TMyProc; var Param; const ExceptionPrefix: String);
begin
try
MyProc(Param);
except
on E: Exception do
begin
E.message := ExceptionPrefix + E.message;
raise;
end;
end;
Ega23 (2004-06-23 13:36:00) [10]Я хочу с помощью текста эксепшена получать место ошибки.
Digitman (2004-06-23 11:55:00) [11]
> Ega23 © (23.06.04 11:44) [9]
> на уровень предка можно было бы очень много вынести, а так
> всё у каждого потомка расписывать придётся
не оч понятно, для чего здесь нужно имя метода
ты хочешь в потомке вызвать приватный метод предка ?
ну так перенеси метод предка из private в protected и сделай виртуальным ! всех делов ..
Ega23 (2004-06-23 11:44:00) [12]пиши как в исхонов вопросе - явно указывай функцию.
Просто так на уровень предка можно было бы очень много вынести, а так всё у каждого потомка расписывать придётся.
ОК, всем спасибо.
Тимохов (2004-06-23 11:40:00) [13]пиши как в исхонов вопросе - явно указывай функцию.
если надо я так и делаю, в свое время других методов я не нашел.
Ega23 (2004-06-23 11:38:00) [14]Жаль...
Digitman (2004-06-23 11:37:00) [15]
> Ega23 © (23.06.04 11:34) [5]
> С published понятно, мне бы private
имена идентификаторов секции private компилятор не включает ни в какие ран-тайм-таблицы
Ega23 (2004-06-23 11:34:00) [16]Digitman © (23.06.04 11:22) [4]
С published понятно, мне бы private... :о)
Digitman (2004-06-23 11:22:00) [17]
> Можно ли внутри функции получить её имя?
если функция - это не просто функция, а функциональный метод объекта, и объявление этого метода сделано в секции published декларации класса этого объекта, то инф-ция о имени и адресе этогго метода будет включена в таблицу типов времени выполнения (RTTI) и программно доступна в ран-тайм
Ega23 (2004-06-23 11:22:00) [18]TObject.MethodName()
Попробую, спасибо.
clickmaker (2004-06-23 11:18:00) [19]TObject.MethodName() разве что
Тимохов (2004-06-23 11:18:00) [20]в общем случае никак