Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.02.21;
Скачать: [xml.tar.bz2];

Вниз

Как проверить существет ли еще форма в frm:TMyTypeForm?   Найти похожие ветки 

 
pg81 ©   (2009-12-18 12:54) [0]

Есть переменная frm:TMyTypeForm;
Как узнать, что форма на которую ссылается эта переменная,еще существует?
assigned(frm)говорит существет, а на самом деле она уже закрыта...
и потом когда обращаешься к ней, напрмиер, frm.MyFunction, естественно ругается.


 
{RASkov} ©   (2009-12-18 13:13) [1]

> [0] pg81 ©   (18.12.09 12:54)
> а на самом деле она уже закрыта

закрыта и уничтожена - разные вещи.

что бы иметь возможность делать проверку на nil, т.е. if frm=nil then... или assigned(frm)
нужно после уничтожения формы ссылку на нее, например frm нилить... примерно так:
frm.Free;
frm:=nil;

или
FreeAndNil(frm);


 
Демо ©   (2009-12-18 13:34) [2]


> {RASkov} ©   (18.12.09 13:13) [1]


Можно и проверить.

function CheckForm(Form: TForm): Boolean;
begin
 Result := False;
 if Assigned(Form) then
 try
   Result := isWindow(Form.Handle);
 except
 end;
end;


 
pg81 ©   (2009-12-18 13:44) [3]

frm.destroy;
frm:=nil;
помогло.
А чем отличаются destroy и free?


 
clickmaker ©   (2009-12-18 13:45) [4]

F1

Components on a form are created and destroyed automatically. However, if you write your own code to instantiate objects, you are responsible for disposing of them as well. Every object inherits a Destroy method (called a destructor) from TObject. To destroy an object, however, you should call the Free method (also inherited from TObject), because Free checks for a nil reference before calling Destroy.


 
DVM ©   (2009-12-18 14:46) [5]


> pg81 ©   (18.12.09 12:54) 


> Как узнать, что форма на которую ссылается эта переменная,
> еще существует?

Сразу напрашивается вопрос - зачем это знать? Причем каков бы не был твой ответ это говорит имхо лишь об ошибках проектирования.


 
{RASkov} ©   (2009-12-18 18:58) [6]

> [3] pg81 ©   (18.12.09 13:44)
> frm.destroy;
> frm:=nil;
> помогло.

Не нужно вызывать Destroy напрямую.... нужно Free.

> А чем отличаются destroy и free?

Посмотри метод Free и описание Destroy в TObject ...все станет ясно. Если понимаешь разницу статического от виртуального метода...


 
brother ©   (2009-12-21 04:49) [7]

> А чем отличаются destroy и free?

дестрой - тупо разрушение объекта ,и если он не создан, то ловим AV
фрии - проверка на "созданнось" (не nil), а уж потом дестрой, если объект не создан, то при проверке дестрой не вызовется и AV не будет ;)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.02.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
6-1212600148
Real
2008-06-04 21:22
2010.02.21
TWebBrowser - организовать preview html-кода


2-1261392187
Труженик
2009-12-21 13:43
2010.02.21
Мастера подскажите по Acces mdb


15-1258553129
test
2009-11-18 17:05
2010.02.21
Коллайдер


9-1183470560
THandle
2007-07-03 17:49
2010.02.21
DirectX


1-1222891708
RustB
2008-10-02 00:08
2010.02.21
Копирование с шифрованием





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский