Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[54.197.64.207] |
|
Сообщ.
#1
,
|
|
|
В каких случаях бывает ошибка в этой конструкции:
if Assigned(FOnEvent) then FOnEvent; Ошибка вылазит на последнем оп FOnEvent и процедуру не запускает |
Сообщ.
#2
,
|
|
|
if Assigned(FOnEvent) then FOnEvent; Вообще, если мы работаем с TNotifyEvent, следует писать так: if Assigned(FOnEvent) then FOnEvent(Self); |
Сообщ.
#3
,
|
|
|
Ясно что надо писать так:
if Assigned(FOnEvent) then FOnEvent(Self); Компилятор по-другому не схавает. Ошибка выскакивает здесь: FOnEvent(Self); Может кусок кода побольше надо показать? Эта конструкция находится в FTimer.OnTimer:=FTimerOnTimer; procedure TMyObject.FTimerOnTimer(Sender: TObject); begin if {...} then if Assigned(FOnEvent) then FOnEvent(Self); end; не из-за этого? |
Сообщ.
#4
,
|
|
|
Глядя на эту конструкцию нельзя назвать её ошибочной. Что находится на месте комментария?
|
Сообщ.
#5
,
|
|
|
s-mike, ты меня удивляешь. Как можно сделать Free для метода объекта? Ведь FOnEvent, это поле типа метод объекта.
Что же касается непосредственно вопроса, так любой Exception возникший внутри метода присвоенного полю FOnEvent, будет выглядеть именно так, как описал fateflex. |
Сообщ.
#6
,
|
|
|
Цитата Петрович @ s-mike, ты меня удивляешь. Как можно сделать Free для метода объекта? Ведь FOnEvent, это поле типа метод объекта. Да, Петрович, сглупил. Невнимательно прочитал вопрос, а с ответом поспешил. Добавлено Цитата fateflex @ Ошибка выскакивает здесь: FOnEvent(Self); Как это удалось определить, если Цитата Rrader @ if Assigned(FOnEvent) then FOnEvent; написано в одну строчку? |
Сообщ.
#7
,
|
|
|
В методе присвоенном FOnEvent нету ошибки, наверно где-то ещё снаружи.
|
Сообщ.
#8
,
|
|
|
Тогда такой вопрос, а когдя возникает данная ошибка при выполнении программы?
|
Сообщ.
#9
,
|
|
|
Попробуй такое:
Замени свое: FTimer.OnTimer:=FTimerOnTimer; procedure TMyObject.FTimerOnTimer(Sender: TObject); begin if {...} then if Assigned(FOnEvent) then FOnEvent(Self); end; на: FTimer.OnTimer:=FTimerOnTimer; procedure TMyObject.FTimerOnTimer(Sender: TObject); begin try if {...} then try if Assigned(FOnEvent) then try FOnEvent(Self); except ShowMessage('3'); end; except ShowMessage('2'); end; except ShowMessage('1'); end; end; И посмотри что "скажет". |
Сообщ.
#10
,
|
|
|
Кстати, ошибка может быть именно уже в самом обработчике, и выглядеть в таком случае может как именно ошибка компонента. Посмотри CallStack в отладчике при возникновении исключения...
|