Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1138888280
Silica
2006-02-02 16:51
2006.02.26
Массивы


2-1139130196
JEK2
2006-02-05 12:03
2006.02.26
конвертировать таблицу *.DBF в *.DB


1-1138212845
Yegorchic
2006-01-25 21:14
2006.02.26
Помогите


15-1138909708
ctudent
2006-02-02 22:48
2006.02.26
Приглашаю коллег Дельферов!!!!


3-1135769758
Id
2005-12-28 14:35
2006.02.26
SQL error code = -804





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский