Форум: "Основная";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
ВнизКак определить, что объект уже не жив... Найти похожие ветки
← →
aleshap (2006-01-16 10:45) [0]Добрый день!
Думаю, что вопрос простой... только не могу найти на него ответ...
Ситуация такова
var F:TForm
begin
F:=myForm;
...
при некоторый условиях происходит myForm.Free
...
Как определить, что F - это уже несуществующий объект?
end;
Заранее Спасибо!!!
← →
Fay © (2006-01-16 10:47) [1]Никак
← →
aleshap (2006-01-16 10:49) [2]такого не может быть!!!
← →
Fay © (2006-01-16 10:50) [3]2 aleshap (16.01.06 10:49) [2]
Спорим на пузырь?
← →
begin...end © (2006-01-16 10:52) [4]> aleshap (16.01.06 10:45)
Screen.Forms перебирать.
← →
aleshap (2006-01-16 10:55) [5]Если посмотреть в корень вопроса...
1. Очистили объект
2. Должна же быть функция проверки, является ли данная область актуальной?
← →
КиТаЯц © (2006-01-16 10:56) [6]ЗдОрово! Прям лирика какая-то... "объект уже не жив"..., а необорот наверное будет "объект еще не мертв"...
← →
Плохиш © (2006-01-16 10:56) [7]
> 2. Должна же быть функция проверки, является ли данная область
> актуальной?
Зачем, это лежит на совести программиста.
← →
evvcom © (2006-01-16 10:56) [8]
> Screen.Forms перебирать.
Конечно можно, но все-таки существует вероятность (маленькая правда очень), что этот адрес будет занимать, например, уже MyForm2. :)
Так что скорее все же Fay прав.
> Fay © (16.01.06 10:50) [3]
Я тебя поддержал! Пузырем поделишься? :-)
← →
Fay © (2006-01-16 10:57) [9]2 begin...end © (16.01.06 10:52) [4]
Всё равно без гарантии, что по этому адресу именно то, что нужно.
← →
Fay © (2006-01-16 10:58) [10]2 evvcom © (16.01.06 10:56) [8]
Без проблем! 8)
← →
aleshap (2006-01-16 11:01) [11]Ну так что скажите господа?
← →
Плохиш © (2006-01-16 11:01) [12]
> aleshap (16.01.06 11:01) [11]
> Ну так что скажите господа?
Пузырь давай.
← →
umbra © (2006-01-16 11:02) [13]2 aleshap (16.01.06 10:45)
для уверенности надо вести свой собственный список форм и регулярно его обновлять
← →
evvcom © (2006-01-16 11:04) [14]О! На пузырь нас уже трое.
> Ну так что скажите господа?
Мы уже всё сказали. Ждем пузырь теперь.
← →
Fay © (2006-01-16 11:05) [15]2 Плохиш © (16.01.06 10:56) [7]
Только что смотрел - ничего там не лежит! 8)
← →
aleshap (2006-01-16 11:06) [16]Понятно... спасибо за участие...
можете вопрос переводить в разжел "потрепаться"
← →
aleshap (2006-01-16 11:07) [17]извините отпечатка: раздел
← →
sniknik © (2006-01-16 11:07) [18]для формы можно просто на событие onDestroy написать f:= nil; и проверять на него.
← →
begin...end © (2006-01-16 11:07) [19]> evvcom © (16.01.06 10:56) [8]
> Конечно можно, но все-таки существует вероятность (маленькая
> правда очень), что этот адрес будет занимать, например,
> уже MyForm2.
И что? Если так случится, то F (см. вопрос) -- это существующая форма, пусть и другая.
← →
aleshap (2006-01-16 11:10) [20]Вопрос не сводиться строго к объектам типа TForm.
← →
evvcom © (2006-01-16 11:12) [21]
> И что? Если так случится, то F (см. вопрос) -- это существующая
> форма, пусть и другая.
Да, тоже согласен. Автор этого не сказал, но скорее всего он ожидает в этом F все же тот первоначальный myForm, ведь ничего другого он туда не клал!
← →
Fay © (2006-01-16 11:14) [22]2 begin...end © (16.01.06 11:07) [19]
> И что?
Представьте, что Вы приходите домой, а Ваша жена с каким-то мужиком. Он - не Вы, но существующий. Аргументы вида "И что?" примите?
← →
Fay © (2006-01-16 11:15) [23]2 aleshap (16.01.06 11:10) [21]
См. [1]
← →
aleshap (2006-01-16 11:16) [24]Да но... по визуальной внешности я отлично пойму, что он это не я...
← →
Плохиш © (2006-01-16 11:18) [25]
> 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:19) [26]в конце концов по имени....паспорту...
вы Fay при сылке на [1] видимо фантазируете
← →
Fay © (2006-01-16 11:19) [27]2 aleshap (16.01.06 11:16) [24]
Я не говорил, что "какой-то" мужик - это Вы.
LOL
← →
evvcom © (2006-01-16 11:20) [28]
> Вопрос не сводиться строго к объектам типа TForm.
Конечно, можно попробовать обернуть в try попытку доступа к "объекту" типа такого:try
if F is TMyForm then
TMyForm(F)...
except
ShowMessage("Пошел на фиг, меня уже нет!");
end;
← →
aleshap (2006-01-16 11:21) [29]по крайней мере во время нашей беседы на нашел уже один выход их сложившейся ситуации... просто не хочется к нему прибегать... хочеться проще и красивее
← →
begin...end © (2006-01-16 11:22) [30]> Fay © (16.01.06 11:14) [22]
Я считаю, что ответ [19] на первоначальный вопрос правилен. Аргументов в пользу обратного я не услышал. Ваши фантазии относительно моей жены (которой у меня нет, и, скорее всего, не будет) меня не интересуют.
← →
evvcom © (2006-01-16 11:22) [31]
> evvcom © (16.01.06 11:20) [28]
Забыл дописать "но лучше так все равно не делать", увлекся.
← →
Fay © (2006-01-16 11:27) [32]2 begin...end © (16.01.06 11:22) [30]
Я понял, это был ответ на вопрос "Как определить, что F - это уже несуществующий объект?".
Всё-таки сложно иногда без (не)определённых артиклей.
← →
aleshap (2006-01-16 11:31) [33]Fay © (16.01.06 11:27) [32] да вы правы
← →
evvcom © (2006-01-16 11:40) [34]
> Я считаю, что ответ [19] на первоначальный вопрос правилен.
> Аргументов в пользу обратного я не услышал.
Пожалуйста, аргумент. В частном случае это сойдет, а в общем нет. Этот способ не является универсальным гарантированным способом. Например, я такой извращенец оверрайдил CreateNew и извратился и сделал так, что Screen.AddForm(Self); не отработала. Ну захотелось мне, чтобы моя форма вдруг стала не видимой для тех, кто их ищет через Screen.
Так что я настаиваю на пузыре!
← →
Ega23 © (2006-01-16 11:45) [35]Везде после TCustomForm.Free ставить TCustomForm:=nil.
Ну и потом проверять, типа if Assigned(F) then ...
← →
Fay © (2006-01-16 11:46) [36]2 evvcom © (16.01.06 11:40) [34]
Не парьтесь! Из вопроса и из [20] не следует, что объект - наследник TForm.
Скажу больше, это просто указатель куда-то, поэтому говорить о Screen.Forms не имеет смысла.
← →
evvcom © (2006-01-16 11:49) [37]
> Из вопроса и из [20] не следует, что объект - наследник
> TForm
Да я это давно понял, но даже если и следовало бы, то аргумент в [34]. Т.е. в общем случае даже для TForm [1].
← →
TUser © (2006-01-16 11:59) [38]Используй FreeAndNil
← →
begin...end © (2006-01-16 12:05) [39]> evvcom © (16.01.06 11:40) [34]
Странно, что Вы не предположили, что объект Screen уничтожен, или что TForm -- это вовсе не класс формы, а какой-то другой класс с таким именем.
← →
Плохиш © (2006-01-16 12:07) [40]
> TUser © (16.01.06 11:59) [38]
> Используй FreeAndNil
И чем он в этом случае поможет? ;-)
> var F:TForm
>
> begin
> F:=myForm;
> ...
> при некоторый условиях происходит myForm.Free
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.045 c