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