Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно ли внутри функции получить её имя?


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]

в общем случае никак


Наверх

Титульная страница Поиск, карта сайта Написать письмо