Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.26;
Скачать: CL | DM;

Вниз

Как определить, что объект уже не жив...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.033 c
2-1139300087
Нулевой
2006-02-07 11:14
2006.02.26
Как перевести компонент с API на Pascal(delphi)?


15-1139378173
Ega23
2006-02-08 08:56
2006.02.26
С Днём рождения! 8 февраля


15-1139204810
Ega23
2006-02-06 08:46
2006.02.26
С Днём рождения! 4 февраля


15-1138005763
cyborg
2006-01-23 11:42
2006.02.26
Только что в локальном чате :)


15-1139128854
vidiv
2006-02-05 11:40
2006.02.26
Фишка