![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как определить, что объект уже не жив... [D6, Win2k, WinXP]
aleshap © (2006-01-16 10:45:00)Добрый день!
Думаю, что вопрос простой... только не могу найти на него ответ...
Ситуация такова
var F:TForm
begin
F:=myForm;
...
при некоторый условиях происходит myForm.Free
...
Как определить, что F - это уже несуществующий объект?
end;
Заранее Спасибо!!!
Fay (2006-01-16 11:46:00) [21]2 evvcom © (16.01.06 11:40) [34]
Не парьтесь! Из вопроса и из [20] не следует, что объект - наследник TForm.
Скажу больше, это просто указатель куда-то, поэтому говорить о Screen.Forms не имеет смысла.
Ega23 (2006-01-16 11:45:00) [22]Везде после TCustomForm.Free ставить TCustomForm:=nil.
Ну и потом проверять, типа if Assigned(F) then ...
evvcom (2006-01-16 11:40:00) [23]
> Я считаю, что ответ [19] на первоначальный вопрос правилен.
> Аргументов в пользу обратного я не услышал.
Пожалуйста, аргумент. В частном случае это сойдет, а в общем нет. Этот способ не является универсальным гарантированным способом. Например, я такой извращенец оверрайдил CreateNew и извратился и сделал так, что Screen.AddForm(Self); не отработала. Ну захотелось мне, чтобы моя форма вдруг стала не видимой для тех, кто их ищет через Screen.
Так что я настаиваю на пузыре!
aleshap (2006-01-16 11:31:00) [24]Fay © (16.01.06 11:27) [32] да вы правы
Fay (2006-01-16 11:27:00) [25]2 begin...end © (16.01.06 11:22) [30]
Я понял, это был ответ на вопрос "Как определить, что F - это уже несуществующий объект?".
Всё-таки сложно иногда без (не)определённых артиклей.
evvcom (2006-01-16 11:22:00) [26]
> evvcom © (16.01.06 11:20) [28]
Забыл дописать "но лучше так все равно не делать", увлекся.
begin...end (2006-01-16 11:22:00) [27]> Fay © (16.01.06 11:14) [22]
Я считаю, что ответ [19] на первоначальный вопрос правилен. Аргументов в пользу обратного я не услышал. Ваши фантазии относительно моей жены (которой у меня нет, и, скорее всего, не будет) меня не интересуют.
aleshap (2006-01-16 11:21:00) [28]по крайней мере во время нашей беседы на нашел уже один выход их сложившейся ситуации... просто не хочется к нему прибегать... хочеться проще и красивее
evvcom (2006-01-16 11:20:00) [29]
> Вопрос не сводиться строго к объектам типа TForm.
Конечно, можно попробовать обернуть в try попытку доступа к "объекту" типа такого:
try
if F is TMyForm then
TMyForm(F)...
except
ShowMessage('Пошел на фиг, меня уже нет!');
end;
Fay (2006-01-16 11:19:00) [30]2 aleshap (16.01.06 11:16) [24]
Я не говорил, что "какой-то" мужик - это Вы.
LOL
aleshap (2006-01-16 11:19:00) [31]в конце концов по имени....паспорту...
вы Fay при сылке на [1] видимо фантазируете
Плохиш (2006-01-16 11:18:00) [32]
> Fay © (16.01.06 11:05) [15]
> 2 Плохиш © (16.01.06 10:56) [7]
> Только что смотрел - ничего там не лежит!
А где ты у программиста совесть нашёл? ;-)
> Fay © (16.01.06 11:15) [23]
> 2 aleshap (16.01.06 11:10) [21]
> См. [1]
Stack overflow
aleshap (2006-01-16 11:16:00) [33]Да но... по визуальной внешности я отлично пойму, что он это не я...
Fay (2006-01-16 11:15:00) [34]2 aleshap (16.01.06 11:10) [21]
См. [1]
Fay (2006-01-16 11:14:00) [35]2 begin...end © (16.01.06 11:07) [19]
> И что?
Представьте, что Вы приходите домой, а Ваша жена с каким-то мужиком. Он - не Вы, но существующий. Аргументы вида "И что?" примите?
evvcom (2006-01-16 11:12:00) [36]
> И что? Если так случится, то F (см. вопрос) -- это существующая
> форма, пусть и другая.
Да, тоже согласен. Автор этого не сказал, но скорее всего он ожидает в этом F все же тот первоначальный myForm, ведь ничего другого он туда не клал!
aleshap (2006-01-16 11:10:00) [37]Вопрос не сводиться строго к объектам типа TForm.
begin...end (2006-01-16 11:07:00) [38]> evvcom © (16.01.06 10:56) [8]
> Конечно можно, но все-таки существует вероятность (маленькая
> правда очень), что этот адрес будет занимать, например,
> уже MyForm2.
И что? Если так случится, то F (см. вопрос) -- это существующая форма, пусть и другая.
sniknik (2006-01-16 11:07:00) [39]для формы можно просто на событие onDestroy написать f:= nil; и проверять на него.
aleshap (2006-01-16 11:07:00) [40]извините отпечатка: раздел